【问题标题】:PHP Laravel extending resource routingPHP Laravel 扩展资源路由
【发布时间】:2014-06-10 06:06:43
【问题描述】:

Laravel 路由功能允许你命名一个资源并命名一个控制器来配合它。我是 Laravel 新手,想知道是否有人知道如何在提供的路由类中扩展资源方法。

基本上说我有:(效果很好)

/invoices

但是说我想要:

/invoices/status/unpaid

这是如何实现的?

要了解我正在做的事情的基础知识,请检查: http://laravel.com/docs/controllers#resource-controllers

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    资源控制器将您绑定到特定的 URL,例如:

    • 获取|发布/invoices
    • 获取|放置/invoices/{$id}
    • 获取/invoices/create
    • 等等as documented

    由于按照惯例,GET /invoices 用于列出所有发票,因此您可能需要对其添加一些过滤:

    /invoices?status=unpaid - 然后您可以在代码中使用它

    <?php
    
    class InvoiceController extends BaseController {
    
        public function index()
        {
            $status = Input::get('status');
            // Continue with logic, pagination, etc
        }
    
    }
    

    如果您不想通过查询字符串使用过滤,在您的情况下,您可能可以执行以下操作:

    // routes.php
    Route::group(array('prefix' => 'invoice'), function()
    {
        Route::get('status/unpaid', 'InvoiceController@filter');
    });
    
    Route::resource('invoice', 'InvoiceController');
    

    这可能会起作用,因为创建了订单路线。匹配的 first 路由将是用于完成请求的路由。

    【讨论】:

    • 出色的解决方案和解释。我不知道资源是否会接管整个“发票”部分。谢谢。
    • 确实如此,请参阅我对代码的编辑。根据文档,您必须在 Route::resource 调用之前定义其他路由。见laravel.com/docs/controllers#resource-controllers
    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2016-09-13
    • 2017-02-12
    相关资源
    最近更新 更多