我正在使用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()
方法的内容。
现在我想浏览网址,了解项目的详细信息
localhost::8000/test/item1/details
localhost::8000/test/item2/details
localhost::8000/test/item3/details
....
localhost::8000/test/itemN/details
当我的路线控制器就像这样
时,我不知道该怎么做Route::controller('test','TestController');
因为所有项都是变量。所以为了得到我想要的结果,我改变了我的路线:
Route::controller('test/{id}','TestController');
现在我可以访问这些网址
了localhost::8000/test/item3/details
但问题是我现在无法访问localhost::8000/test
我也想访问以下网址
localhost::8000/test/item3/shop1/details
localhost::8000/test/item3/shop2/details
那么如何在不使用route::resource
答案 0 :(得分:0)
我找到了克服这一挑战的解决方案。
在我的路线文件中,我添加了两条新路线
Route::get('test/{var1}/{var2}/details','TestController@getItem');
Route::get('test/{id}/details','TestController@getDetails');
现在我可以访问这些网址
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');
寻找更好的解决方法:)
答案 1 :(得分:0)
我没有太多的知识,但我认为它会做点什么......
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;});
});
答案 2 :(得分:0)
用于路由支持的隐式控制器。您可以使用RESTFul控制器来减少路由声明。