【问题标题】:Laravel noun1/$arg1/noun2/$arg2 routing/controllerLaravel noun1/$arg1/noun2/$arg2 路由/控制器
【发布时间】:2013-05-01 00:02:47
【问题描述】:

我想要以下网址:

http://localhost/question/1/choices/

和可选的 /question/1/choices/3

其中 1 是 question_id,3 是choice_id。

我如何在 Laravel 中做到这一点?

谢谢

更新 我想我可以通过类似的方式实现这一目标

Route::get('questions/(:num)/choices/(:num)')

但是我怎样才能将它链接到控制器

Class Questions extends Base_Controller {
    public static $restful = TRUE;
    public function get_choices($question_id, $choice_id) {
        //
    }
}

【问题讨论】:

  • Laravel 的哪个版本。你试过什么? documentation中有很多关于路由的信息
  • 我正在使用 Laravel 3。该文档非常有用,但我无法在其中找到我想要的内容。

标签: laravel laravel-routing


【解决方案1】:

您是否想要这样的Questions_Controller(记住_Controller,这很重要):

// controllers/questions.php
class Questions_Controller extends Base_Controller {
    public $restful = true;
    public function get_choices($question_id, $choice_id)
    {
        // Use $question_id and $choice_id
    }
}

你的路线看起来像controller@action,所以......

// routes.php
Route::get('questions/(:num)/choices/(:num)', 'questions@choices');

路由到操作在Controller Routing 的末尾,就在CLI Route Testing 部分之前。通配符对操作的作用与对匿名函数的作用相同。

【讨论】:

  • 非常感谢,这是我正在寻找的缺失链接。是的,在我的示例中,我忘记在名称类的末尾添加 _Controller。我希望只用 Route::controller(arraY('questions'));在我的路线中,但似乎不能。
  • Route::controller('questions');将允许您拥有像questions/choices/(:num)/(:num) 这样的路由,任何破坏controller/action/param* 模式的东西都需要手动路由。
【解决方案2】:

Laravel 允许你使用嵌套资源.. 在您的情况下,您的 routes.php 中可以包含以下内容

Route::resource('question', 'QuestionController');
Route::resource('question.choices', 'ChoicesController');

然后在你的 ChoicesController 中确保同时传入 question_Id 和 choice_Id

您可以通过运行检查是否所有路由都正确:

php artisan routes

【讨论】:

  • 非常感谢您的回答。我已经阅读了有关嵌套路由的信息,但我还没有找到该示例代码。顺便说一句,我使用的是 Laravel 3。我尝试运行 php artisan routes 但找不到该任务。
  • 我的错...我应该提到这是 Laravel 4 的功能,在 v3 中不可用。相反,您可以像@phill-sparks 回答的那样做。虽然已经宣布本月发布 Laravel 4 稳定版本,但如果可行,您可能需要考虑在某个时候升级。有很多很棒的新功能可以利用!
  • 我的错,我忘了说我正在使用 Laravel 3。是的,最近一直在查看 Laravel 4 的新闻,但我等不及发布了。但是,我会在下一个项目中使用它。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2023-03-27
  • 2023-03-27
相关资源
最近更新 更多