我正在创建一个cms类型的应用程序,它只注册用户以及用户可以创建帖子的位置。问题出在route()
。在blade html中的超链接中定义route()
时,它无效。
路线:
Route::resource('/admin/users', 'AdminUsersController');
HTML Blade:
<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 资源/视图/管理/用户/ 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 :(得分:1)
对于你的案例,请使用它:
Route::resource('/admin/users', 'AdminUsersController', ['as' => 'admin']);
**************** ------ *******************
当访问路线时,Laravel会从上到下浏览您的路线列表,直到找到符合“路线”的路线。此时立即选择此路线。
在您的示例中,当尝试使用GET访问/ blog / bin时,它有两个可能的匹配项:
Route::get('/blog/{id}', 'BlogController@show');
和
Route::get('/blog/bin', 'BlogController@bin');
在这种情况下,路由:: get(&#39; / blog / {id}&#39;,&#39; BlogController @ show&#39;);首先是选择它。
如前面的答案正确陈述,将/ blog / bin路由放在/ blog / {id}路由上方可以解决问题。但是,这个解决方案&#39;你将来会遇到类似的错误(例如,定义/ blog / example路由并意外地将其放在/ blog / {id}下)。此外,我个人认为路线的运作取决于将它们放入的顺序并不是很优雅。
在我看来,如果可能的话,更强大的解决方案是使用正则表达式约束来限制/ blog / {id}接受的可能值。
例如,如果您使用博客文章的数字ID,您知道如果id是数字,您只想使用route / blog / {id}。因此,您可以按如下方式定义路线:
Route::get('/blog/{id}', 'BlogController@show')->where('id', '[0-9]+');
当然这通常是不可能的,例如,如果你使用帖子标题作为id,但是如果有某种方法来区分帖子id和任何其他/ blog / foo路由,那么这将是一种可能性
或者为了获得最佳理解,您必须遵循以下网址:
https://laravel.com/docs/5.4/routing
答案 1 :(得分:1)
这是可以预料的。如果您希望路线名称为admin.user.*
,则需要将Route
更改为:
Route::resource('/admin/users', 'AdminUsersController', ['as' => 'admin']);
这会将admin.
加到路由名称前面。
希望这有帮助!