拉拉维尔 - 软件包无法识别身份验证功能?

我做了一个包裹,上面计算了网页上的访问者。目前,我有一个单一的路由,控制器和视图,除了显示一个简单的字符串之外,它们没有太多作用。我有一个单独的Laravel应用程序,这个软件包是专门为之构建的。在这个单独的应用程序中,我有一个名为后端的布局文件。


layouts/layouts/backend.blade.php.


我的软件包视图是这样扩展这个模板的:(backend.blade.php不存在于软件包中,而是存在于单独的 laravel 应用程序中)


@extends('layouts.layouts.backend')


@section('content')

    <div class="container-fluid pt-5 ">

        <div class="row">

            <div class="col-md-6">

                <h3>{{ __('Visitors') }}</h3>

            </div>

        </div>

    </div>

@endsection

该软件包成功扩展了此布局,但它找不到诸如 和Auth::user()->token


Trying to get property 'token' of non-object (View: /Users/rainierlaan/Sites/rainierlaan/resources/views/layouts/layouts/backend.blade.php)

为什么会发生这种情况?


这是我的软件包服务提供商


 public function register()

    {

        // Controllers

        $this->app->make('Rainieren\Visitors\Http\Controllers\VisitorController');

        // Views

        $this->loadViewsFrom(__DIR__.'/resources/views', 'visitors');

        $this->publishes([

            __DIR__.'/resources/views' => resource_path('views/visitors'),

        ]);

        // Migrations

        $this->loadMigrationsFrom(__DIR__.'/database/migrations');

    }


    /**

     * Bootstrap services.

     *

     * @return void

     */

    public function boot()

    {

        include __DIR__ . '/routes/routes.php';

    }

当我这样做时,视图成功发布到正确的文件夹,但不知何故无法识别功能,如或vendor:publishAuth::user()->tokenAuth::user()->unreadNotifications->count())


这是我的套餐路线:


<?php



Route::get('dashboard/visitors', '\Rainieren\Visitors\Http\Controllers\VisitorController@index')->name('visitors');


这是控制器


public function index()

    {

        return view('visitors::index'); 

    }


慕田峪9158850
浏览 81回答 2
2回答

蛊毒传说

我需要更多的调试信息,但我的第一个假设是缺少或中间件。AuthenticateSessionAuthenticateLaravel 为内部的路由定义了一个默认的中间件组,该组使用中间件。这是新安装的样子:webroutes/web.phpAuthenticateSessionRoute::group([&nbsp; &nbsp; 'middleware' => 'web', <<< this is the magic part&nbsp; &nbsp; 'namespace' => $this->namespace,], function ($router) {&nbsp; &nbsp; require base_path('routes/web.php');});在这里,我们看到使用了中间件组。web在您的自定义模块/服务提供商中,情况并非如此。您的定义将添加到 此组中,但不在此组中。因此,不会执行对用户进行身份验证所需的所有内部设置。Route::get()Router在这种情况下,我会尝试使用或将使用主项目组中间件。->middleware('auth')->middleware('web')Route::get('dashboard/visitors', '\Rainieren\Visitors\Http\Controllers\VisitorController@index')&nbsp; ->name('visitors')&nbsp; ->middleware('web');这是一个不同的想法:如果您说您始终经过身份验证。然后,您可以尝试将所有中间件移动到 () 中的全局中间件中。webKernelprotected $middleware = []我没有测试过这个,但我可以想象这也可以工作。

拉风的咖菲猫

我已经在我的所有活动包中看到它们在视图中根本不使用Auth类。他们的解决方法是在控制器中使用它并将其传递到视图:$user = auth()->user();return view('folder.view' ,['user'=>$user]);然后在视图中:{{$user->token}} <!-- OR --!> {{$user->unreadNotifications->count()}}显然,正如@N69S所说,只有当用户经过身份验证时,这才有效。希望这有效!编辑:(抱歉第一次理解不好)错误在于你的服务提供者类 yo 必须在引导函数上执行所有逻辑,而不是在寄存器中执行,因为如果你在寄存器函数中执行所有操作,则在 laravel 框架(说些什么)之前加载所有逻辑 https://laravel.com/docs/5.7/providers#the-register-method您的服务提供者应按如下方式结束:&nbsp; &nbsp; public function register()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; //Nothing&nbsp; &nbsp; }&nbsp; &nbsp; /**&nbsp; &nbsp; &nbsp;* Bootstrap services.&nbsp; &nbsp; &nbsp;*&nbsp; &nbsp; &nbsp;* @return void&nbsp; &nbsp; &nbsp;*/&nbsp; &nbsp; public function boot()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; // Controllers&nbsp; &nbsp; &nbsp; &nbsp; $this->app->make('Rainieren\Visitors\Http\Controllers\VisitorController');&nbsp; &nbsp; &nbsp; &nbsp; // Views&nbsp; &nbsp; &nbsp; &nbsp; $this->loadViewsFrom(__DIR__.'/resources/views', 'visitors');&nbsp; &nbsp; &nbsp; &nbsp; $this->publishes([&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; __DIR__.'/resources/views' => resource_path('views/visitors'),&nbsp; &nbsp; &nbsp; &nbsp; ]);&nbsp; &nbsp; &nbsp; &nbsp; // Migrations&nbsp; &nbsp; &nbsp; &nbsp; $this->loadMigrationsFrom(__DIR__.'/database/migrations');&nbsp; &nbsp; &nbsp; &nbsp; include __DIR__ . '/routes/routes.php';&nbsp; &nbsp; }希望这最终有效!
打开App,查看更多内容
随时随地看视频慕课网APP