Llo*_*ple 3 php laravel laravel-5
我需要在请求的开始时从数据库加载一些东西,并且可以在我的应用程序的每个地方使用它,只需一个查询和完全访问权限.
有人告诉我,我可以在ServiceProvider中做到这一点,但我不知道如何,阅读文档并没有帮助我.
有人可以告诉我一个如何共享Config::all()所有控制器和所有视图中的访问权限的示例吗?
man*_*nix 12
我建议你做一个中间件课程.在中间件文件夹中创建一个新类,让我们说GlobalConfig.每个中间件类都有一个handle()接收传入请求以便对其进行修改的方法,或者在您完成之前执行特定任务的方法.此时,您可以共享所需的数据:
<?php
namespace MyApp\Http\Middleware;
use Closure;
class GlobalConfig {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// asignning data
view()->share('config', [1, 2, 3]);
// let the request follows its flow
return $next($request);
}
Run Code Online (Sandbox Code Playgroud)
}
好吧,正如我所说,中间件可以处理传入的请求,但我们需要指定何时处理它.您可以捕获它时有两个特定点:
如果你想在每一个传入请求与它玩,就需要中间件类附加到$middleware阵列的app/HTTP/Kernel.php文件,如下所示:
protected $middleware = [
'Illuminate\View\Middleware\ShareErrorsFromSession',
'MyApp\Http\Middleware\GlobalConfig'
];
Run Code Online (Sandbox Code Playgroud)
如果您只想为某个路由或路由应用中间件类,则需要$routeMiddleware在app/HTTP/Kernel.php文件的数组中为中间件类设置别名,如下所示:
protected $routeMiddleware = [
'globalConfig' => 'MyApp\Http\Middleware\GlobalConfig',
];
Run Code Online (Sandbox Code Playgroud)
最后,只需添加您想要的每个路径的别名:
Route::get('profile', ['middleware' => 'globalConfig', 'uses' => 'ProfileController@show']);
Run Code Online (Sandbox Code Playgroud)
关于app/Providers/AppServiceProvider.php,如果您将以下代码放在其引导方法中:
Config::set(['user' => ['name' => 'John']]);
Run Code Online (Sandbox Code Playgroud)
然后在您的应用中的任何位置,您都可以获得该值Config::get('user.name');
因此,您可以使用Eloquent模型的结果提供配置,只需将结果转换为数组即可.
当然,你可以创建一个ServiceProvider专门处理它的人.