如何修改或更新 laravel 的隐式控制器以获得所需的 url?
How to modify or update laravel's Implicit controller to get desired url?
我正在使用 Route:Controller
进行 laravel 5.2 项目。
我发现自己处于一个有趣的境地。
假设我的路由文件有这个代码
Route::controller('test','TestController');
TestController
有以下方法
class TestController extends Controller
{
public function getIndex(){
dd('index');
}
public function getDetails($id){
return $id.'/details';
}
public function getItem($var1,$var2){
return $var1.$var2.'/item';
}
}
所以如果我路由 localhost:8000/test
它会显示 getIndex()
方法的内容。
现在我想浏览 url 以获得此 项目的详细信息
localhost::8000/test/item1/details
localhost::8000/test/item2/details
localhost::8000/test/item3/details
....
localhost::8000/test/itemN/details
我的route controller是这样的,不知道怎么办
Route::controller('test','TestController');
因为所有项都是变量。所以为了得到我想要的结果,我改变了我的路线:
Route::controller('test/{id}','TestController');
现在我可以访问这些 url
localhost::8000/test/item3/details
但问题是现在我无法访问 localhost::8000/test
我也想访问以下url
localhost::8000/test/item3/shop1/details
localhost::8000/test/item3/shop2/details
那么我如何在不使用 route::resource
的情况下解决这个问题
我找到了克服这一挑战的解决方案。
在我的路线文件中,我添加了两条新路线
Route::get('test/{var1}/{var2}/details','TestController@getItem');
Route::get('test/{id}/details','TestController@getDetails');
现在我可以访问这些 url
localhost::8000/test
localhost::8000/test/item3/details
localhost::8000/test/item3/shop1/details
但是发现了一个问题。也就是说,我还可以使用以下网址访问数据
localhost::8000/test/details/item3
localhost::8000/test/details/item3/shop1
所以为了防止这种情况我改变了我的方法
public function getDetails($id){
return $id.'/details';
}
public function getItem($var1,$var2){
return $var1.$var2.'/item';
}
至
public function details($id){
return $id.'/details';
}
public function item($var1,$var2){
return $var1.$var2.'/item';
}
并将路线修改为
Route::get('test/{var1}/{var2}/details','TestController@getItem');
Route::get('test/{id}/details','TestController@getDetails');
到
Route::get('test/{var1}/{var2}/details','TestController@item');
Route::get('test/{id}/details','TestController@details');
寻找更好的方法来解决这个问题:)
我没有那么多知识,但我认为它会有所作为..
Route::group(['prefix'=>'test'], function(){
Route::get('/', function(){return "hi";});
Route::get('/{id}', function($id){return "hi".$id;});
Route::get('/{id}/{id2}', function($id, $id2){return "hi".$id.$id2;});
});
用于路由支持的隐式控制器 已从 L5.2 中删除。您可以使用 RESTFul 控制器来减少路由声明。
我正在使用 Route:Controller
进行 laravel 5.2 项目。
我发现自己处于一个有趣的境地。
假设我的路由文件有这个代码
Route::controller('test','TestController');
TestController
有以下方法
class TestController extends Controller
{
public function getIndex(){
dd('index');
}
public function getDetails($id){
return $id.'/details';
}
public function getItem($var1,$var2){
return $var1.$var2.'/item';
}
}
所以如果我路由 localhost:8000/test
它会显示 getIndex()
方法的内容。
现在我想浏览 url 以获得此 项目的详细信息
localhost::8000/test/item1/details
localhost::8000/test/item2/details
localhost::8000/test/item3/details
....
localhost::8000/test/itemN/details
我的route controller是这样的,不知道怎么办
Route::controller('test','TestController');
因为所有项都是变量。所以为了得到我想要的结果,我改变了我的路线:
Route::controller('test/{id}','TestController');
现在我可以访问这些 url
localhost::8000/test/item3/details
但问题是现在我无法访问 localhost::8000/test
我也想访问以下url
localhost::8000/test/item3/shop1/details
localhost::8000/test/item3/shop2/details
那么我如何在不使用 route::resource
我找到了克服这一挑战的解决方案。
在我的路线文件中,我添加了两条新路线
Route::get('test/{var1}/{var2}/details','TestController@getItem');
Route::get('test/{id}/details','TestController@getDetails');
现在我可以访问这些 url
localhost::8000/test
localhost::8000/test/item3/details
localhost::8000/test/item3/shop1/details
但是发现了一个问题。也就是说,我还可以使用以下网址访问数据
localhost::8000/test/details/item3
localhost::8000/test/details/item3/shop1
所以为了防止这种情况我改变了我的方法
public function getDetails($id){
return $id.'/details';
}
public function getItem($var1,$var2){
return $var1.$var2.'/item';
}
至
public function details($id){
return $id.'/details';
}
public function item($var1,$var2){
return $var1.$var2.'/item';
}
并将路线修改为
Route::get('test/{var1}/{var2}/details','TestController@getItem');
Route::get('test/{id}/details','TestController@getDetails');
到
Route::get('test/{var1}/{var2}/details','TestController@item');
Route::get('test/{id}/details','TestController@details');
寻找更好的方法来解决这个问题:)
我没有那么多知识,但我认为它会有所作为..
Route::group(['prefix'=>'test'], function(){
Route::get('/', function(){return "hi";});
Route::get('/{id}', function($id){return "hi".$id;});
Route::get('/{id}/{id2}', function($id, $id2){return "hi".$id.$id2;});
});
用于路由支持的隐式控制器 已从 L5.2 中删除。您可以使用 RESTFul 控制器来减少路由声明。