2017-05-29 4 views
0


admin.post.category
admin.post.tag
admin.post.themelaravelコントローラがconstruce内currentRouteName()を使用することはできません()

ルートは

Route::group(['prefix' => 'post', 'as' => 'post.'], function() { 
    Route::resource('category', 'Admin\Post\TermsController'); 
    Route::resource('theme', 'Admin\Post\TermsController'); 
    Route::resource('tag', 'Admin\Post\TermsController'); 
}); 

のHttp \コントローラ\管理をadmin.php \ \投稿後\ TermsController

public function __construct(Request $request) 
{ 
    $this->request = $request; 

    $route_name = Route::currentRouteName(); 
    $arr = explode('.', $route_name); 
    echo "<pre>".print_r($arr[2], 1)."</pre>"; exit; 

} 

http://localhost/admin/post/categoryページにアクセスすると、カテゴリが表示されます。私は、コマンドを実行したときに、私は、インデックス()に()__constructから3行を移動した場合でも、

php artisan route:list 

それは

[ErrorException] 
    Undefined offset: 2 

を示しその後

$route_name = Route::currentRouteName(); 
$arr = explode('.', $route_name); 
echo "<pre>".print_r($arr[2], 1)."</pre>"; exit; 

"PHPの職人ルート:リスト"うまくいく。

これを修正するにはどうすればよいですか?

答えて

0

名前に1ドットしか含まれていないルートがいくつかあるため、エラーが発生します。したがって、$arr[2]にアクセスすると、定義されていないため、エラーUndefined offset: 2になります。すべてのルートメソッドを単一のコントローラに押し込むように見えます。 php artisan route:listを実行しようとすると、すべてのルートがチェックされ、コンストラクタが呼び出されるため、名前が1ドットしかないルートでは失敗します。これにあなたのコードを変更すればうまくいくはずです。

$route_name = \Route::currentRouteName(); 
$arr = explode('.', $route_name); 

if (isset($arr[2])) { 
    echo "<pre>".print_r($arr[2], 1)."</pre>"; 
} 

exit; 
+0

解決策を使用しました。しかし、__construct()のecho $ route_nameがphp artisan route:list出力に何も表示しないので、 "1ドットしか含まない名前のルート"はありません。ブラウザでのみOKです。ありがとうございました。 – user3562689

関連する問題