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' =&gt; $activeProject])

如果这不起作用,您可能需要通过控制器传递它

【讨论】:

以上是关于Laravel Blade 模板 @extends的主要内容,如果未能解决你的问题,请参考以下文章

laravel-模板引擎Blade

laravel5.1框架基础之Blade模板继承简单使用方法分析

在Sage 9的观点中,Laravel Blade的$ loop vairable是否可用?

Blade 到 Thymeleaf 模板和视图转换的疑惑

无法在 Blade 中使用 jQuery

如何在Laravel 5中检索视图名称?