【问题标题】:Laravel 5.2 - ServiceProvider boot not workingLaravel 5.2 - ServiceProvider 启动不工作
【发布时间】:2016-07-04 16:45:14
【问题描述】:

尝试使用服务提供者在所有视图页面中设置一个变量 @extends('layouts.app') 但不起作用,首先我显示下面的代码。

应用服务提供者

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Auth;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // Using class based composers...
        view()->composer('layouts.app', function($view){

            $view->with('current_user', Auth::user());

        });

    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

当我访问调用 {{$current_user}} 的页面时,它显示以下错误

ErrorException in 5a5612347179ad88a6d4ebacc5d911a184c1b4ed.php line 14:

Undefined variable: current_user (View: C:\xampp\htdocs\soyegg\resources\views\shops\edit\showroom.blade.php)

浏览了网站上解决的几个问题并检查了以下内容,但仍然失败: 1. AppServiceProvider 在 config.app 中(Laravel 5.2 默认) 2. php artisan 清晰编译 3.php工匠优化 4.检查是否有compiled.php,尝试手动清除,但storage/framework和vendor都没有。

请帮忙!

【问题讨论】:

    标签: laravel-5.2


    【解决方案1】:

    我认为您的ServiceProvider 工作正常,您只需更改将数据传递给视图的方式。我自己测试过,我可以确认将数据传递给稍后将包含在@extends() 中的视图将不起作用。相反,您可以使用其他方法:

    view()->share('current_user', Auth::user());
    

    或者使用通配符:

    view()->composer('*', function ($view) {
        $view->with('current_user', Auth::user());
    });
    
    // wildcard with prefix
    view()->composer('prefix.*', function ($view) {
        $view->with('current_user', Auth::user());
    });
    

    【讨论】:

    • 感谢您的快速回复 Rifki!非常感激。对于通配符,这意味着所有页面都会有这样的变量?
    • 通过使用 share 方法,页面正常加载而没有错误,但 {{$current_user}} 没有任何值,我仔细检查 {{$current_user->id}} 和它说我得到了非对象的属性。我再次检查 {{Auth::user()}} 本身是否在页面上有效并且有效。
    • 很抱歉在这里添加另一个问题。我试图通过调用 $current_user->id 在 current_user 作曲家下方再添加一个 view()->composer,但它说 current_user 是一个未定义的变量。有没有更合适的方法?
    • 刚刚意识到ServiceProviderAuth::user() 之前运行还不可用,因此可以将view()-&gt;share('current_user', Auth::user()); 放在基本控制器的__construct() 方法上。
    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2016-08-11
    • 1970-01-01
    相关资源
    最近更新 更多