私は、Webページ上で訪問者をカウントしているパッケージを作りました。現在、私は単純な文字列に非常に多くの他のディスプレイよりをしない単一のルート、コントローラとビューを持っています。私は、このパッケージには、具体的のためにビルドされ、別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:publish
表示が正常に右のフォルダに発行していますが、何らかの形のような機能を認識することができないAuth::user()->token
かをAuth::user()->unreadNotifications->count())
これは私のパッケージのルートであります:
<?php
Route::get('dashboard/visitors', '\Rainieren\Visitors\Http\Controllers\VisitorController@index')->name('visitors');
そして、これはコントローラであり、
public function index()
{
return view('visitors::index');
}
私はもう少しデバッグ情報を必要とするだろうが、私の最初の仮定が欠落しているAuthenticateSession
かAuthenticate
のミドルウェア。
Laravelはデフォルトのミドルウェア・グループを定義するweb
内部のあなたのルートにroutes/web.php
、このグループは、使用するAuthenticateSession
ミドルウェアを。これは、新規インストールがどのように見えるかです:
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');
ここでは別の考え方は次のとおりです。
あなたが言うならば、あなたは常に認証されています。そして、あなたはすべてを移動しようとすることができweb
、あなたの中に地球ミドルウェアにミドルウェアをKernel
(protected $middleware = []
)。
私はこれをテストしていませんでしたが、私はこれが同様に仕事ができることを想像することができます。