24

在 PHP 中,我曾经在 my 中定义一些变量header.php并在所有页面中使用它们。我怎么能在 Laravel 中有这样的东西?

我不是在谈论View::share('xx', 'xx' );

假设我想要一个包含一个数字的变量,并且我需要在我的所有控制器中使用这个数字来计算一些东西。

4

4 回答 4

78

听起来像是配置文件的一个很好的候选者。

创建一个新的,我们称之为calculations.php

Laravel ~4ish:

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+
于 2013-11-06T13:11:25.737 回答
6

在 上设置一个属性,该属性BaseController应该位于您的controllers目录中。

您的控制器应该扩展BaseController该类并因此继承其属性。

于 2013-11-06T09:57:29.867 回答
0

您可以使用View Composers

而不是使用文档中描述的引导方法,您可以使用:

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());
    }
}

请记住,因为您声明了一个新的服务提供者,所以它需要包含在config/app.php的“提供者”数组中

于 2015-06-23T02:56:05.607 回答
0

您可以在 中定义它们app\Http\Controllers\Controller.php,例如:

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    public $test = 'something';

    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

然后在所有控制器中,您可以通过执行以下操作访问此属性:

$this->test;

于 2020-12-12T19:39:41.500 回答