【问题标题】:Laravel RESTful Controller - Params Before Action NameLaravel RESTful 控制器 - 动作名称前的参数
【发布时间】:2014-09-03 08:34:52
【问题描述】:

我有 UsersController 这是 RESTful 控制器,里面有一些功能。

UsersController.php内:

function postOutletVisit($id){
   // some code
}

routes.php 内:

Route::controller('users', 'UsersController');

通过这条路线,我可以像这样访问postOutletVisit 操作:

[POST] mydomain.com/users/outlet-visit/{id}

但我想知道是否可以将该链接转换为:

[POST] mydomain.com/users/{id}/outlet-visit

我知道我可以通过为每个操作定义路由来做到这一点,例如:

Route::post('users/{id}/outlet-visit', 'UsersController@outletVisit')

但这不适合我,因为UsersConroller里面有很多动作,我会放宽对动作的命名方便(动作名称的第一部分决定了其中使用的方法,而不是在@987654330中单独定义方法@文件)

【问题讨论】:

  • outlet-visit 是一个与 id 为 {id} 的用户相关的数据库模型,我会考虑为它创建一个单独的控制器。我知道我有很多选择,但我想知道是否可以更改参数的默认位置。
  • 实际上在您的第一条评论之后,我得到了您的提示,我通过为OutletVisit 创建单独的控制器来实现我想要的行为,像这样Route::controller('users/{id}/visits', 'OutletVisitController'); 在我的路线中注册它,我对此很陌生最近我来自CodeIgniter 的路线能力,我发现Laravel 在每个领域都更好。
  • @arthurfl 我建议您添加您的 cmets 作为接受它的答案。

标签: laravel laravel-4


【解决方案1】:

Outlet Visit 是一个特定的资源,所以它不属于您的 UserController,应该有自己的控制器。

class OutletController extends BaseController
{
    public function postStore($userId)           // Controller for storing Outlet Visits
    {
        ...
    }
}

然后为 OutletController 定义路由,指定需要将其附加到特定用户:

Route::controller('users/{id}/outlet', 'OutletController');

如果需要,您可以为此控制器添加更多操作,例如列表、用于添加/编辑的表单等。

【讨论】:

    【解决方案2】:

    首先,我认为您的意思是使用Route::resource('users', 'UsersController')

    其次,当然可以。只需重载下面的其他路由方法:

    // This defines the predefined Laravel routing
    Route::resource('users', 'UsersController')
    
    Route::post('users/{id}/outlet-visit', 'UsersController@outletVisit');
    

    【讨论】:

    • 感谢您的帮助,但我的意思是我的帖子中的每一件事,我可以而且我知道如何做你提到的事情(它在我的帖子中!),但我正在寻找更有效的东西.
    • 哦,对不起,我误读了你。在那种情况下,我认为你真的别无选择。默认 Route::resource 遵循 RESTful 约定。如果你想定义你自己的,你必须使用提供的方法(例如Route::get)。这就是它们存在的原因。
    【解决方案3】:

    除非您扩展它,否则无法更改由方法 Route::controller 创建的 url。

    【讨论】:

      猜你喜欢
      • 2013-10-12
      • 2013-11-14
      • 2016-09-03
      • 2015-01-15
      • 2013-05-28
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多