Laravel 路由解析为不同的方法
Laravel route resolving to a different method
我正在尝试设置一个基本的 Laravel CRUD 应用程序,但我无法为每个操作设置页面。
当我访问路线 case/create 时,它会打开 show 的页面。
routes/web.php
use App\Http\Controllers\HospitalCase as HospitalCase;
Route::controller(HospitalCase::class)->group(function() {
Route::get('/cases','index')->middleware('auth')->name('cases');
Route::get('/case/{id}','show')->middleware('auth');
Route::get('/case/create','create')->middleware('auth');
Route::post('/case/create','store')->middleware('auth');
Route::get('/case/edit/{$id}','edit')->middleware('auth');
Route::post('/case/edit/{$id}','update')->middleware('auth');
Route::get('/case/delete/{$id}','destroy')->middleware('auth');
});
HospitalCase.php控制器
class HospitalCase extends Controller
{
function index()
{
echo 'index';
}
function create()
{
echo 'create';
}
function show($id)
{
echo 'show';
}
function store()
{
// validation rules
}
function edit($id)
{
return view('case/edit');
}
function update($id)
{
}
function destroy($id)
{
}
}
这是我在浏览器上看到的:
几个小时以来我一直在努力解决这个问题,但想不出我做错了什么。
PS: auth 中间件正在使用 laravel breeze(未修改)
它显示表演路线的原因是因为您定义了
Route::get('/case/{id}','show')->middleware('auth');
在它之前,因此,它匹配 case/create
作为 show('create')
之后尝试定义路线。
Route::get('/case/create','create')->middleware('auth');
Route::post('/case/create','store')->middleware('auth');
Route::get('/case/{id}','show')->middleware('auth');
只是想重申@TimLewis 的建议,我认为你需要放置这条路线:
Route::get('/case/create','create')->middleware('auth');
这条路线上方:
Route::get('/case/{id}','show')->middleware('auth');
但是你可以尝试使用Laravel的路由资源,这样你就不需要写出所有的路由 -
use App\Http\Controllers\HospitalCaseController;
Route::resource('case', HospitalCaseController::class);
我正在尝试设置一个基本的 Laravel CRUD 应用程序,但我无法为每个操作设置页面。
当我访问路线 case/create 时,它会打开 show 的页面。
routes/web.php
use App\Http\Controllers\HospitalCase as HospitalCase;
Route::controller(HospitalCase::class)->group(function() {
Route::get('/cases','index')->middleware('auth')->name('cases');
Route::get('/case/{id}','show')->middleware('auth');
Route::get('/case/create','create')->middleware('auth');
Route::post('/case/create','store')->middleware('auth');
Route::get('/case/edit/{$id}','edit')->middleware('auth');
Route::post('/case/edit/{$id}','update')->middleware('auth');
Route::get('/case/delete/{$id}','destroy')->middleware('auth');
});
HospitalCase.php控制器
class HospitalCase extends Controller
{
function index()
{
echo 'index';
}
function create()
{
echo 'create';
}
function show($id)
{
echo 'show';
}
function store()
{
// validation rules
}
function edit($id)
{
return view('case/edit');
}
function update($id)
{
}
function destroy($id)
{
}
}
这是我在浏览器上看到的:
几个小时以来我一直在努力解决这个问题,但想不出我做错了什么。
PS: auth 中间件正在使用 laravel breeze(未修改)
它显示表演路线的原因是因为您定义了
Route::get('/case/{id}','show')->middleware('auth');
在它之前,因此,它匹配 case/create
作为 show('create')
之后尝试定义路线。
Route::get('/case/create','create')->middleware('auth');
Route::post('/case/create','store')->middleware('auth');
Route::get('/case/{id}','show')->middleware('auth');
只是想重申@TimLewis 的建议,我认为你需要放置这条路线:
Route::get('/case/create','create')->middleware('auth');
这条路线上方:
Route::get('/case/{id}','show')->middleware('auth');
但是你可以尝试使用Laravel的路由资源,这样你就不需要写出所有的路由 -
use App\Http\Controllers\HospitalCaseController;
Route::resource('case', HospitalCaseController::class);