3

我想知道如何区分来自子资源中不同父资源的请求。

考虑由帖子和用户共享的子资源评论。评论控制器如何知道正确的父资源是什么?

我得到了这些路线:

Route::resource('posts', 'PostsController');
Route::resource('posts.comments', 'CommentsController');
Route::resource('users', 'UsersController');
Route::resource('users.comments', 'CommentsController');

CommentsController中,我得到了这个功能:

public function index($parent_id) {
    // return multiple comments here
}

所以我可能想显示属于帖子的所有评论或属于用户的所有评论,但在这种情况下如何CommentsController判断$parent_id是指帖子还是用户?

4

2 回答 2

5

这应该工作

Route::resource('posts', 'PostsController');
Route::resource('users', 'UsersController');
Route::resource('posts.comments', 'CommentsController');
Route::resource('users.comments', 'CommentsController');

要让父母使用这个

$parent = Request::segment(1) === 'posts' ? 'posts' : 'users';
于 2013-08-07T07:53:17.783 回答
3

如果您想要Route::model绑定,以便将模型而不是 id 传递给您的控制器操作,请考虑以下内容来区分用户和帖子:

Route::model('post', 'Post');
Route::model('user', 'User');
Route::model('comment', 'Comment');

Route::resource('posts', 'PostsController');
Route::resource('posts.comments', 'CommentsController');
Route::resource('users', 'UsersController');
Route::resource('users.comments', 'CommentsController');

然后,如果您想确保动作定义中的参数类型,只需让用户和帖子从一些抽象基类扩展,如下所示:

abstract class Commentable extends \Eloquent {}

class User extends Commentable {}

现在您可以在控制器中使用以下内容:

class CommentsController extends BaseController {
    function index(Commentable $commentable, Comment $comment) {
        // Possibly check if this comment and the given commentable are even related...
        dd($commentable); // make your logic check if it is an instanceof User or Post!
    }
}
于 2014-10-04T12:09:29.170 回答