在PHP中,我曾经在我的header.php
中定义了一些变量,并在我的所有页面中使用它们。我怎么能在Laravel中有这样的东西?
我不是在谈论View::share('xx', 'xx' );
假设我想要一个包含数字的变量,我需要在我的所有控制器中使用这个数字来计算。
答案 0 :(得分:68)
听起来像configuration file的好候选人。
创建一个新的,我们称之为calculations.php
:
Laravel~4ish:
app
config
calculations.php
Laravel~5ish:
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
答案 1 :(得分:6)
在BaseController
上设置一个属性,该属性应位于controllers
目录中。
您的控制器应扩展BaseController
类,从而继承其属性。
答案 2 :(得分: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());
}
}
请记住,因为您宣布了一个新的服务提供商,因此需要将其包含在&#39;提供商中。 config / app.php
中的数组答案 3 :(得分:0)
您可以在file=open.("file.txt", "a")
file.write(email)
file.close()
中定义它们,例如:
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;
}