2017-08-09 131 views
1

我正在創建一個cms類型的應用程序,它只註冊用戶並在其中創建帖子。問題出在route()。在blade中的超鏈接中定義route()時,它不起作用。Laravel路徑()無法正常工作

路線:

Route::resource('/admin/users', 'AdminUsersController'); 

HTML刀片:

 <ul class="nav nav-second-level"> 
      <li> 
       <a href="{{route('admin.users.index')}}">All Users</a> 
      </li> 

      <li> 
       <a href="{{route('admin.users.create')}}">Create User</a> 
      </li> 

     </ul> 

文件夾結構:

資源/視圖/管理/用戶/ create.blade.php 資源/視圖/管理/ users/index.blade.php

它不工作。它說Route [admin.users.index] not defined. (View: C:\wamp64\www\codehacking\resources\views\layouts\admin.blade.php) (View: C:\wamp64\www\codehacking\resources\views\layouts\admin.blade.php)

請幫我解決這個問題。

回答

0

這是可以預期的。如果你想的路線名稱爲admin.user.*你需要改變你的Route是:

Route::resource('/admin/users', 'AdminUsersController', ['as' => 'admin']); 

這將前綴admin.的路徑名。

希望這會有所幫助!

+0

工作。真棒!非常感謝。 – Sanjay

0

併爲您的個案使用這樣的:

Route::resource('/admin/users', 'AdminUsersController', ['as' => 'admin']); 

**************** ------ ******** ***********

當訪問一條路線時,Laravel從上到下遍歷您的路線列表,直到找到一個「匹配」,此時立即選擇該路線。

在您的例子,使用GET試圖訪問/博客/紙槽時,它有兩個潛在的匹配:

Route::get('/blog/{id}', '[email protected]'); 

Route::get('/blog/bin', '[email protected]'); 

在這種情況下,路線::得到(」/blog/{id}','BlogController @ show');首先它會被選中。

由於前面的答案正確,因此將/ blog/bin路線放在/ blog/{id}路徑上方可以解決問題。然而,這個「解決方案」在將來會導致類似的錯誤(例如,定義/ blog /示例路由並意外將其置於/ blog/{id}之下)。此外,我個人認爲,你的路線功能取決於將它們放入的順序並不是非常優雅。

在我看來,如果可能的話,更可靠的解決方案是限制可能的值/ blog/{id}接受正則表達式約束。

例如,如果您正在爲您的博客帖使用數字ID,那麼您知道,如果id是數字,您只想使用route/blog/{id}。因此,您可以按如下定義路線:

Route::get('/blog/{id}', '[email protected]')->where('id', '[0-9]+'); 

當然,這往往不是一個可能性,例如,如果您使用的文章標題爲ID,但如果有某種方式從區分後ID任何其他/博客/富路線,那麼這將是一種可能性。

或爲最瞭解你必須按照這個網址:

https://laravel.com/docs/5.4/routing 
+0

感謝您的信息兄弟! – Sanjay