2013-05-07 2 views
0

Я хотел бы иметь следующий URL:

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

и необязательно/вопрос/1/выбор/3

где 1 представляет собой question_id и 3 - choice_id.

Как я могу это сделать в Laravel?

Благодаря

UPDATE Я думаю, что я мог бы добиться этого с чем-то вроде

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

Но как я могу связать его с контроллером

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

Какая версия Laravel. И что ты пробовал? Там много информации о маршрутизации в [документации] (http://laravel.com/docs/routing#wildcards) –

+0

Я использую Laravel 3. Документ очень полезен, но я не смог найти то, что я был ища там. – llt

ответ

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 
    } 
} 

И ваш маршрут будет выглядеть [email protected], так что ...

// routes.php 
Route::get('questions/(:num)/choices/(:num)', '[email protected]'); 

Routing к действиям разберём в конце Controller Routing, как раз перед секцией на CLI Route Testing. Подстановочные знаки работают так же, как и анонимные функции.

+0

Большое спасибо, это недостающее звено, которое я ищу. Да, я забыл добавить _Controller в конце класса имени в моем примере. Я надеялся, что смогу это с помощью Route :: controller (arraY ('questions')); в моем маршруте, но, похоже, он не может. – llt

+0

Маршрут :: контроллер ('вопросы'); позволит вам иметь маршруты типа 'questions/choice/(: num)/(: num)', все, что нарушает шаблон 'controller/action/param *', нужно маршрутизировать вручную. –

0

Laravel позволяет использовать вложенные ресурсы. В вашем случае у вас может быть следующее на ваших маршрутах.php

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

Затем в ChoicesController обязательно проходить как в question_Id и choice_Id

Вы можете проверить, если все правильно разгромлены командой:

php artisan routes 
+0

Большое спасибо за ответ. Я читал о вложенных маршрутах, но я не нашел этот пример кода. Кстати, я использую Laravel 3. Я пытался использовать php-artisan-маршруты, но не смог найти эту задачу. – llt

+0

Мой плохой ... Я должен был упомянуть, что это функция Laravel 4 и недоступна в v3. Вместо этого вы могли бы сделать так, как ответил @ phill-sparks. Несмотря на то, что в этом месяце объявлено о выпуске стабильной версии Laravel 4, вы можете захотеть рассмотреть возможность модернизации в какой-то момент, если это возможно. Множество отличных новых функций, чтобы воспользоваться преимуществами! – tymondesigns

+0

Моя вина, я забыл упомянуть, что я использую Laravel 3. Да, в последнее время проверяю новости Laravel 4, но я не могу дождаться выхода. Однако я бы использовал его в своих следующих проектах. – llt

Смежные вопросы