質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

431閲覧

Laravel5.4 routesよりも前でグローバル変数(config)を保持したい

pdj_kt

総合スコア16

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/11/30 03:09

編集2017/11/30 06:35

###前提・実現したいこと
ページアクセス時に、URLからサブドメインを切り出しグローバル変数config('global.subdomain')に保持。routesやview等で利用したいと考えています。

###発生している問題
上記の処理をグローバルmiddlewareとして実装しましたが、routes内でconfig('global.subdomain')を取得することができませんでした。どうやらroutesが先に走ってしまっているようです。

※こちらのサイトを見るとroutesより先に走るかと思ったのですが・・・
https://www.pupha.net/archives/3008/

グローバルmiddlewareではなくroutes内で設定すれば問題ありませんが、どうもスマートでは無い気がしています。
routesよりも前でグローバル変数を保持する良い方法はありますか?

###グローバルMiddlewareの登録方法
Http\Kernel.phpに下記のようにMiddlewareを登録しています。

php

1 protected $middleware = [ 2 \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 3 \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 4 \App\Http\Middleware\TrimStrings::class, 5 \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 6 \App\Http\Middleware\ForceSecure::class, 7 \App\Http\Middleware\Cors::class, 8 \App\Http\Middleware\SelectSubdomain::class, // ←ここを追加 9 ];

2017/11/30 12:50追記

routesは下記のようにwhereでconfigを使用しています。

php

1 Route::get('/{pref}/{area}', 'Search\TopController@searchArea') 2 ->name('customer.search.area') 3 ->where('pref',Config::get(config('global.subdomain') . '.const.pref')[0]);

2017/11/30 15:30追記

middlewareSelectSubdomainのソースは下記の通りです。

php

1 public function handle($request, Closure $next) 2 { 3 // ドメインからサブドメインを取得 4 $domain = explode('.', $_SERVER['HTTP_HOST']); 5 $subdomain = $domain[0]; 6 7 // サブドメインをグローバル変数に保持 8 config(['global.subdomain' => $subdomain]); 9 10 return $next($request); 11 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/30 03:48

routeはどのように書いていますか?
pdj_kt

2017/11/30 03:54

routesのソースを追記いたしました。
退会済みユーザー

退会済みユーザー

2017/11/30 04:32

グローバルミドルウェアをルート内で使う・・というのはあまり聞いたことがないです。ミドルウェアをルートより先に実行したいのであれば、ルートミドルウェアに登録するべきだと思うのですが、これだと何か不都合な点があるのでしょうか?
pdj_kt

2017/11/30 05:55

わかりづらくて申し訳ありません。正しくは「グローバルミドルウェアで設定したconfigをルート内で使う」となります。ルートミドルウェアに登録しましても、やはりroutesよりも後に実行されてしまう為、routes内でconfigの参照ができませんでした。
退会済みユーザー

退会済みユーザー

2017/11/30 06:25

configに保持というのがいまいち理解できないので、ミドルウェアの内容とconfigの中身を見せてもらえませんか?
pdj_kt

2017/11/30 06:35

度々失礼します。ミドルウェアのソースを追記しました。(configのソースは手を加えていません)
guest

回答1

0

ベストアンサー

いろいろ試しましたが、routesの前にconfigの値を持ってこようとするとnullになるみたいですね。ちなみに、

Route::get('/', function () { config('const.test'); });

だと値が正常に取れたので、正確にはfunction外だと取れないみたいです。なので大人しくrouteの中にミドルウェアの内容をそのまま書いた方が良いかもしれません。お力になれず申し訳ありません。

投稿2017/11/30 07:39

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pdj_kt

2017/11/30 08:04

ありがとうございます! やはりそうですか。少々気持ち悪いですが、routeに記載することで対応いたします。 根気よくお付き合いいただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問