Глобальная переменная в laravel
В PHP я использовал некоторые переменные в моем header.php
и использовал их на всех моих страницах. Как я могу сделать что-то подобное в Laravel?
Я не говорю о View::share('xx', 'xx' );
Предположим, что я хочу иметь переменную, которая содержит в ней число, и мне нужно это число внутри всех моих контроллеров, чтобы что-то вычислить.
Ответы
Ответ 1
Звучит как хороший кандидат для файла конфигурации .
Создайте новый, назовите его calculations.php
:
app
config
calculations.php
Затем добавьте материал в новый файл конфигурации:
<?php return array( 'some_key' => 42 );
Затем загрузите конфигурацию в свой код где-нибудь (обратите внимание, что имя файла становится "пространством имен" для элемента конфигурации):
echo Config::get('calculations.some_key'); // 42
Ответ 2
Задайте свойство на BaseController
, которое должно быть расположено в вашем каталоге controllers
.
Ваши контроллеры должны расширить класс BaseController
и, таким образом, наследовать его свойства.
Ответ 3
Вы можете использовать Просмотр композиторов
И вместо использования метода загрузки, описанного в документах, вы можете использовать:
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');
ко всем представлениям в вашем приложении.
Вот полный пример того, как я использовал это в одном из моих проектов.
приложение/Поставщики/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());
}
}
Просто помните, что, поскольку вы объявили нового поставщика услуг, он должен быть включен в массив 'providers' в config/app.php