Php 服务器上视图中的未定义变量

Php 服务器上视图中的未定义变量,php,laravel,deployment,Php,Laravel,Deployment,我的Laravel网页在本地运行得非常好,但当我上传到服务器时,它就坏了。在我最后一次更新之前,它一直运行良好,我或多或少地添加了整个网页 两个安装之间存在一些版本不匹配: 本地:Arch Linux 服务器:Ubuntu 14.04 本地:php 5.6.16 服务器:PHP5.5.9 这是我目前面临的错误截图,但还有更多。如果我对此行进行注释,另一个错误显示: 失败视图是一个显示在除登录页面以外的所有页面上的条形图。“layouts/topbar.blade.php”: @如果($rol

我的Laravel网页在本地运行得非常好,但当我上传到服务器时,它就坏了。在我最后一次更新之前,它一直运行良好,我或多或少地添加了整个网页

两个安装之间存在一些版本不匹配:

本地:Arch Linux
服务器:Ubuntu 14.04
本地:php 5.6.16
服务器:PHP5.5.9

这是我目前面临的错误截图,但还有更多。如果我对此行进行注释,另一个错误显示: 失败视图是一个显示在除登录页面以外的所有页面上的条形图。“layouts/topbar.blade.php”:


@如果($role==“admin”)
@恩迪夫

只需先检查角色
是否已设置

@if(isset($role) && $role == "admin")

好吧,就这么做吧,很简单,让我们从头开始吧

在根目录中打开终端并键入

php artisan make:provider ViewcomposerProvider
然后导航并打开
app\providers\viewComposer.php

将此代码添加到该文件中

    namespace App\Providers;

use Auth;
use Illuminate\Support\ServiceProvider;

class Viewcomposer extends ServiceProvider {
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot() {
        view()->composer(['layouts.topbar'], function ($view) {

            if (Auth::check()) {
                $view->with('role', Auth::user()->role);
            } else {
                abort(403, 'Unauthorized action.');
            }
        });
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register() {
        //
    }
}
然后进入
config\app.php

并将其添加到提供者数组中

    App\Providers\ViewcomposerProvider::class,
这应该可以正常工作(在Ubuntu env上测试)

编辑

更改包含顶栏的方式,如下所示

     @if(!Request::is('auth/login') && Auth::check())
       @include('layouts.topbar')
     @endif
编辑2 在顶栏中尝试此操作(在这种情况下,我认为不需要Viewcomposer,但它应该可以解决此问题)

@if(Auth::user()->role==“admin”)
@恩迪夫

发生此错误时,用户是否登录?如果未登录,则Auth::user()->角色将无效用户未登录,但在用户未登录时不会呈现视图。如果我在本地注销,它仍然可以正常工作。啊,你的意思是,只有当用户登录时,视图才可访问,如果不是,中间件将重定向用户,对吗?您使用的是laravel 5?只有一个屏幕用户未登录,该视图不包括在该情况下。是的,我使用的是Laravel 5。是的,如果用户没有登录,就会被重定向。很抱歉,我不明白你的意思,你在上面的评论中说用户没有登录,对吗?(然后它就不起作用了)尝试登录并访问同一个视图,检查错误是否仍然发生。这将“修复”这个问题,但事实是这个角色不存在,这给了我一个新问题。@Peter OK。要么重新制作问题并介绍代码,向我们展示角色是如何创建/附加的,以及模型关系,我将对此作出回应,要么将此标记为正确答案,提出新问题,我将对此作出回应。因此,对于有几个层次问题的冗长答案来说,这是不好的。这里的直接问题是,您没有检查是否设置了变量,这里的根本问题是关系永远无法访问。两个不同的问题。这里的根本问题是,这段代码在一台机器上运行得非常好,但在我的服务器上却不行。这并不能解决所描述的实际问题。@这可能是因为您的服务器关心未定义的索引警告,但您的另一台计算机(出于某种原因)已将错误报告级别设置为忽略未定义的索引警告,这完全是另一个主题。这也可能是由于错误的迁移、数据库引擎中的差异……以及一系列其他原因造成的。您能检查一下
错误报告设置为什么吗?您的其他服务器也可能接受这些警告,或者将它们放入
Log::info
,这完全取决于生产设置的配置方式。或者,您能告诉我们模型关系是什么样子的吗?您使用哪个软件包进行角色管理?它是不是被烤进了拉威尔的ACL?这和我之前的差不多。我试过了,结果还是一样的。嗯,它对我有效,不管怎样,你到底改变了什么?它对我也有效,就是说。我一把它上传到我的服务器上,它就坏了。如果你指的是我在工作后所做的改变,那么我加上了这个。这打破了标准。我的那张支票行得通。登录页面上没有显示该条,但其他页面上都会显示该条。是的,这是wierd,您的检查工作正常(我刚刚添加了一些内容,但我认为这不是问题,请检查编辑),我的电脑现在一切正常,
   @if (Auth::user()->role == "admin")
        <a class="btn btn-primary active" role="button" href= {{URL::to('/dashboard/admin_settings')}}>Admin Settings</a>
    @endif