Laravel Blade 模板 @extends
Posted
技术标签:
【中文标题】Laravel Blade 模板 @extends【英文标题】:Laravel Blade Template @extends 【发布时间】:2016-12-18 07:00:37 【问题描述】:在我看来,我正在扩展一个default
刀片模板,它充当我的主模板。我有一个 ViewComposer 设置,它为这个模板提供了许多变量。
我遇到了一种情况,我需要在我的index.blade.php
中访问这些变量之一,这是启动@extends
函数的页面。
通过 ViewComposer 传递的变量是否到达初始视图的范围?或者我需要创建另一个 ViewComposer 来传递相同的变量。
ViewComposer
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use Illuminate\Http\Request;
use App\Repositories\UserRepository;
use Sentinel;
use App\ProjectUsers;
class MasterComposer
/**
* The user repository implementation.
*
* @var UserRepository
*/
protected $users;
private $request;
/**
* Create a new profile composer.
*
* @param UserRepository $users
* @return void
*/
public function __construct(Request $request)
$this->request = $request;
// Dependencies automatically resolved by service container...
$uid = Sentinel::getUser()->id;
$this->users = ProjectUsers::where("user_id", '=', $uid)->get();
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
$view->with('projects', $this->users);
$view->with('activeProject', $this->request->session()->get("activeProject"));
ComposerServiceProvider
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
/**
* Register bindings in the container.
*
* @return void
*/
public function boot()
// Using class based composers...
view ()->composer ( 'admin/layouts/default', 'App\Http\ViewComposers\MasterComposer' );
/**
* Register the service provider.
*
* @return void
*/
public function register()
//
index.blade.php
@extends('admin/layouts/default')
$activeProject
这最终给了我一个未定义的变量错误。
Undefined variable: activeProject (View: /home/laravel/public_html/base/resources/views/admin/index.blade.php)
【问题讨论】:
【参考方案1】:是的,主布局中可用的所有变量都将传递给它的任何子级。
【讨论】:
如我的问题所述。我没有使用@include
我正在使用@extends
两种情况下都会传递所有变量。
在我的应用程序中似乎不是这样
这是在我的index.blade.php
的顶部:@extends('admin/layouts/default')
请发布适当的代码。也许我们可以帮助你。【参考方案2】:
由于您在内容布局中使用@extends,您可以使用它
@extends('admin/layouts/default', ['activeProject' => $activeProject])
如果这不起作用,您可能需要通过控制器传递它
【讨论】:
以上是关于Laravel Blade 模板 @extends的主要内容,如果未能解决你的问题,请参考以下文章
laravel5.1框架基础之Blade模板继承简单使用方法分析