亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

拉拉維爾 - 軟件包無法識別身份驗證功能?

拉拉維爾 - 軟件包無法識別身份驗證功能?

PHP
慕田峪9158850 2022-09-25 21:08:39
我做了一個包裹,上面計算了網頁上的訪問者。目前,我有一個單一的路由,控制器和視圖,除了顯示一個簡單的字符串之外,它們沒有太多作用。我有一個單獨的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()->tokenTrying 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())這是我的套餐路線:<?phpRoute::get('dashboard/visitors', '\Rainieren\Visitors\Http\Controllers\VisitorController@index')->name('visitors');這是控制器public function index()    {        return view('visitors::index');     }
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

我需要更多的調試信息,但我的第一個假設是缺少或中間件。AuthenticateSessionAuthenticate


Laravel 為內部的路由定義了一個默認的中間件組,該組使用中間件。這是新安裝的樣子:webroutes/web.phpAuthenticateSession


Route::group([

    'middleware' => 'web', <<< this is the magic part

    'namespace' => $this->namespace,

], function ($router) {

    require base_path('routes/web.php');

});

在這里,我們看到使用了中間件組。web


在您的自定義模塊/服務提供商中,情況并非如此。您的定義將添加到 此組中,但不在此組中。因此,不會執行對用戶進行身份驗證所需的所有內部設置。Route::get()Router


在這種情況下,我會嘗試使用或將使用主項目組中間件。->middleware('auth')->middleware('web')


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

  ->name('visitors')

  ->middleware('web');

這是一個不同的想法:


如果您說您始終經過身份驗證。然后,您可以嘗試將所有中間件移動到 () 中的全局中間件中。webKernelprotected $middleware = []


我沒有測試過這個,但我可以想象這也可以工作。


查看完整回答
反對 回復 2022-09-25
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

我已經在我的所有活動包中看到它們在視圖中根本不使用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


您的服務提供者應按如下方式結束:


    public function register()

    {

        //Nothing

    }


    /**

     * Bootstrap services.

     *

     * @return void

     */

    public function boot()

    {

        // 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');

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

    }

希望這最終有效!


查看完整回答
反對 回復 2022-09-25
  • 2 回答
  • 0 關注
  • 106 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號