2017-08-09 194 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