我希望系统区域设置的信息在每个视图中都可用,因此我可以突出显示用户当前选择的任何语言.经过一些谷歌搜索后,我发现在官方文档中解决了价值分享问题.但是,在将代码放入boot()这样之后:
class AppServiceProvider extends ServiceProvider{
public function boot(){
view()->share('locale', \Lang::getLocale());
}
}
Run Code Online (Sandbox Code Playgroud)
$locale在视图中访问时,变量始终保留默认系统区域设置,而不是当前选定的区域设置.为什么?
Pan*_*ris 19
我通常使用View Composers,因此它更清晰,更易读.
例如,如果我想与主导航栏共享一个变量到我的所有视图,我遵循以下规则:
您可以使用artisan cli创建服务提供者:
php artisan make:provider ViewComposerServiceProvider
在ViewComposerServiceProvider文件中,创建composeNavigation方法,其中包含刀片模板main.nav-menu,该菜单表示具有共享变量的navmenu.
该ViewComposerServiceProvider的样子:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$this->composeNavigation();
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
private function composeNavigation()
{
view()->composer('main.nav-menu', 'App\Http\ViewComposers\NavComposer');
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在上面的文件中看到的那样,我们有App\Http\ViewComposers\NavComposer.php,所以让我们创建该文件.在App\Http中创建文件夹ViewComposers,然后在里面创建NavComposer.php文件.
该NavComposer.php文件:
<?php
namespace App\Http\ViewComposers;
use App\Repositories\NavMenuRepository;
use Illuminate\View\View;
class NavComposer
{
protected $menu;
public function __construct(NavMenuRepository $menu)
{
$this->menu = $menu;
}
public function compose(View $view)
{
$thing= $this->menu->thing();
$somethingElse = $this->menu->somethingElseForMyDatabase();
$view->with(compact('thing', 'somethingElse'));
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在NavComposer.php文件中看到的那样,我们有了存储库.通常情况下,我创建的一个仓库应用程序目录,因此创建存储库的目录应用程序,然后,创建内部NavMenuRepository.php文件.
该文件是该设计模式的核心.在该文件中,我们必须获取我们想要与所有视图共享的变量的值.
看看下面的文件:
<?php
namespace App\Repositories;
use App\Thing;
use DB;
class NavMenuRepository
{
public function thing()
{
$getVarForShareWithAllViews = Thing::where('name','something')->firstOrFail();
return $getVarForShareWithAllViews;
}
public function somethingElseForMyDatabase()
{
$getSomethingToMyViews = DB::table('table')->select('name', 'something')->get();
return $getSomethingToMyViews;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2838 次 |
| 最近记录: |