如何修改或更新 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 控制器来减少路由声明。