【发布时间】:2016-12-05 23:25:17
【问题描述】:
我是 Laravel 新手,我在路由类方面遇到了一些问题
这是我的 routes.php
Route::get('/', function () {
return view('welcome');
});
Route::auth();
Route::get('/home', 'HomeController@index');
Route::resource('/dashboard', 'DashboardController');
Route::resource('/dashboard/users', 'DashboardUsersController');
Route::resource('/dashboard/posts', 'DashboardPostsController');
除
app.dev/dashboard/users/index
app.dev/dashboard/posts/index
我创建的每条路线都喜欢
Route::get('dashboard/users/import', function (){
return 'Importing a user';
});
或
Route::get('dashboard/users', 'DashboardUsersController@getUsers');
我已经尝试了一些我在这里找到的建议,比如清理缓存、查看和路由但没有奏效,我的项目文件夹的权限是 777
这是我的 DashboardUsersController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class DashboardUsersController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('admin.users.index');
}
public function getUsers()
{
return view('admin.users.index');
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('admin.users.index');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
return view('admin.users.index');
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
编辑 php artisan route:list
+--------+-----------+------------------------------+-------------------------+-----------------------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+------------------------------+-------------------------+-----------------------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | web |
| | POST | dashboard | dashboard.store | App\Http\Controllers\DashboardController@store | web |
| | GET|HEAD | dashboard | dashboard.index | App\Http\Controllers\DashboardController@index | web |
| | GET|HEAD | dashboard/create | dashboard.create | App\Http\Controllers\DashboardController@create | web |
| | POST | dashboard/posts | dashboard.posts.store | App\Http\Controllers\DashboardPostsController@store | web |
| | GET|HEAD | dashboard/posts | dashboard.posts.index | App\Http\Controllers\DashboardPostsController@index | web |
| | GET|HEAD | dashboard/posts/create | dashboard.posts.create | App\Http\Controllers\DashboardPostsController@create | web |
| | PUT|PATCH | dashboard/posts/{posts} | dashboard.posts.update | App\Http\Controllers\DashboardPostsController@update | web |
| | DELETE | dashboard/posts/{posts} | dashboard.posts.destroy | App\Http\Controllers\DashboardPostsController@destroy | web |
| | GET|HEAD | dashboard/posts/{posts} | dashboard.posts.show | App\Http\Controllers\DashboardPostsController@show | web |
| | GET|HEAD | dashboard/posts/{posts}/edit | dashboard.posts.edit | App\Http\Controllers\DashboardPostsController@edit | web |
| | GET|HEAD | dashboard/users | dashboard.users.index | App\Http\Controllers\DashboardUsersController@getUsers | web |
| | POST | dashboard/users | dashboard.users.store | App\Http\Controllers\DashboardUsersController@store | web |
| | GET|HEAD | dashboard/users/create | dashboard.users.create | App\Http\Controllers\DashboardUsersController@create | web |
| | DELETE | dashboard/users/{users} | dashboard.users.destroy | App\Http\Controllers\DashboardUsersController@destroy | web |
| | GET|HEAD | dashboard/users/{users} | dashboard.users.show | App\Http\Controllers\DashboardUsersController@show | web |
| | PUT|PATCH | dashboard/users/{users} | dashboard.users.update | App\Http\Controllers\DashboardUsersController@update | web |
| | GET|HEAD | dashboard/users/{users}/edit | dashboard.users.edit | App\Http\Controllers\DashboardUsersController@edit | web |
| | PUT|PATCH | dashboard/{dashboard} | dashboard.update | App\Http\Controllers\DashboardController@update | web |
| | DELETE | dashboard/{dashboard} | dashboard.destroy | App\Http\Controllers\DashboardController@destroy | web |
| | GET|HEAD | dashboard/{dashboard} | dashboard.show | App\Http\Controllers\DashboardController@show | web |
| | GET|HEAD | dashboard/{dashboard}/edit | dashboard.edit | App\Http\Controllers\DashboardController@edit | web |
| | GET|HEAD | home | | App\Http\Controllers\HomeController@index | web,auth |
| | GET|HEAD | login | | App\Http\Controllers\Auth\AuthController@showLoginForm | web,guest |
| | POST | login | | App\Http\Controllers\Auth\AuthController@login | web,guest |
| | GET|HEAD | logout | | App\Http\Controllers\Auth\AuthController@logout | web |
| | POST | password/email | | App\Http\Controllers\Auth\PasswordController@sendResetLinkEmail | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\PasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token?} | | App\Http\Controllers\Auth\PasswordController@showResetForm | web,guest |
| | POST | register | | App\Http\Controllers\Auth\AuthController@register | web,guest |
| | GET|HEAD | register | | App\Http\Controllers\Auth\AuthController@showRegistrationForm | web,guest |
+--------+-----------+------------------------------+-------------------------+-----------------------------------------------------------------+------------+
就像我说的,所有上述路线都在工作,除了
/dashboard/users
/dashboard/posts
应该路由到 DashboardUsersController 和 DashboardPostsController 的 index 方法,以及我创建的每个自定义路由。
当我删除 Route::resource 时,Route::get('dashboard/users', 'DashboardUsersController@index'); 工作了,那么可能是一个错误吗?还是我忘记设置的东西?
编辑 2
当我尝试了
Route::get('dashboard/users', 'DashboardUsersController@getUsers');
我删除了
Route::resource('/dashboard/users', 'DashboardUsersController');
确保它没有冲突,并且仍然没有工作
【问题讨论】:
-
使用
php artisan route:list检查您定义的路线 -
如果你改变顺序会发生什么 "Route::resource('/dashboard', 'DashboardController');"在底部?
-
我编辑了我的答案,我解释了当您使用 Route::resource 时会发生什么,以便我的答案是完整的。我希望这会有所帮助。
-
是的,但我仍然不明白为什么只有
DashboardUsersController和DashboardPostsController的index方法不起作用,但create、edit等正在工作 -
@CesarHenriqueDamascena 我在回答中解释了这一点。 Michal 基本上将我所说的内容纳入了他的回答中。他的其余回答毫无意义。如果您所做的只是接受错误的答案,那么尝试帮助您是多么浪费时间......正如所解释的......您制作了一个额外的 get 路由,该路由与由资源类型路由创建的 get 路由冲突。其他人不会仅仅因为您没有与他们做出任何冲突的路线而发生冲突。 Michal 基本上建议 - 你停止使用
resource来支持“正常方法” - 无论这意味着什么,都是一种反解决方案......