PHP では、自分の中でいくつかの変数を定義し、header.php
それらをすべてのページで使用していました。Laravelでそのようなものをどのように持つことができますか?
私は話しているのではありませんView::share('xx', 'xx' );
数値を保持する変数が必要で、何かを計算するためにすべてのコントローラー内でこの数値が必要であるとします。
PHP では、自分の中でいくつかの変数を定義し、header.php
それらをすべてのページで使用していました。Laravelでそのようなものをどのように持つことができますか?
私は話しているのではありませんView::share('xx', 'xx' );
数値を保持する変数が必要で、何かを計算するためにすべてのコントローラー内でこの数値が必要であるとします。
構成ファイルの良い候補のように思えます。
新しいものを作成し、それを呼び出しましょうcalculations.php
:
Laravel〜4っぽい:
app
config
calculations.php
Laravel 5,6,7+:
config
calculations.php
次に、新しい構成ファイルに次のものを入れます。
<?php return [ 'some_key' => 42 ];
次に、コードのどこかで構成を取得します (ファイル名は、構成項目の一種の「名前空間」になることに注意してください)。
echo Config::get('calculations.some_key'); // 42 in Laravel ~4
echo config('calculations.some_key'); // 42 in Laravel ~5,6,7+
View Composerを使用できます
また、ドキュメントに記載されている起動方法を使用する代わりに、次の方法を使用できます。
public function boot()
{
// Using class based composers...
view()->composer(
'*', 'App\Http\ViewComposers\ProfileComposer'
);
// Using Closure based composers...
view()->composer('*', function ($view) {
});
}
それはあなたが宣言する変数をレンダリングします
$view->with('yourVariableName', 'yourVariableValue');
アプリ内のすべてのビューに。
これは、私のプロジェクトの 1 つでこれをどのように使用したかの完全な例です。
アプリ/プロバイダー/ComposerServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
view()->composer(
'*', 'App\Http\ViewComposers\UserComposer'
);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
アプリ/Http/ViewComposers/UserComposer.php
<?php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
use Illuminate\Contracts\Auth\Guard;
class UserComposer
{
protected $auth;
public function __construct(Guard $auth)
{
// Dependencies automatically resolved by service container...
$this->auth = $auth;
}
public function compose(View $view)
{
$view->with('loggedInUser', $this->auth->user());
}
}
新しいサービス プロバイダーを宣言したため、 config/app.phpの「providers」配列に含める必要があることを覚えておいてください。