Laravel Blade模板@extends

3

我的看法是,我正在扩展一个默认的刀片模板,它充当我的主模板。我设置了一个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)
2个回答

0

由于您在内容布局中使用了@extends,因此可以使用以下代码:

@extends('admin/layouts/default', ['activeProject' => $activeProject])

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


0

是的,主布局中可用的所有变量都将传递给其任何子元素。


如我所述的那样,我并没有使用@include,而是使用@extends - scottevans93
所有变量在两种情况下都将被传递。 - Alexey Mezenin
1
在我的应用程序中似乎不是这种情况。 - scottevans93
请发布适当的代码,这样我们就可以帮助您了。 - Alexey Mezenin
已添加了相关的部分,包括我的Composer。 - scottevans93
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接