【问题标题】:Laravel Nested resources and re-usable controllersLaravel 嵌套资源和可重用控制器
【发布时间】:2013-12-01 11:55:57
【问题描述】:

我正在创建一个 API,我想同时包含常规资源和嵌套资源

例如,我会说我有一个Post 资源和Comment 资源。我已经设置了适当的路由和控制器,如下所示

路线

Route::resource('posts', 'PostsControllers'); // /posts/{id}
Route::resource('comments', 'CommentsControllers'); /comments/{id}

但我也希望将 cmets 作为帖子的嵌套资源,像这样

嵌套资源路由

Route::resource('posts.comments', 'PostCommentsControllers'); /posts/{id}/comments/{id}

因为我已经写了我的CommentsController,所以我想知道将CommentsController 重新用于我的PostsController 的最佳方法

谢谢

【问题讨论】:

    标签: php rest laravel laravel-4


    【解决方案1】:

    使用继承是最好的方法:

    class BaseController extends Controller {
    
        public function index() {
    
        }   
    
        public function create() {
    
        }       
    
        public function store() {
    
        }       
    
        public function update() {
    
        }       
    
    }
    
    class PostsController extends BaseController {
    
    }
    
    class CommentsController extends BaseController {
    
    }
    

    【讨论】:

    • 感谢您的回答。我认为这扩展了一个基类。我看到的一个问题是 store() 方法。对于父资源,签名看起来像这样: store($id) 但在嵌套资源中它看起来像: store($parent_id, $id) 但大部分逻辑都是相同的
    【解决方案2】:

    您可以在包含所有逻辑的通用 FooBarController 上扩展您的 Blog/Comment/*Controller。

    您必须提供模型和其他与模型相关的数据,我通过构造函数执行此操作,并且我的模型保存有关列的数据等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多