Laravel route()工作不正常

时间:2017-08-09 16:51:58

标签: php laravel

我正在创建一个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)

请帮我解决这个问题。

2 个答案:

答案 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.加到路由名称前面。

希望这有帮助!