Передать данные из route.php в контроллер в Laravel

Я пытаюсь создать маршрут в Laravel для динамического URL-адреса для загрузки определенного действия контроллера. Я могу заставить его направить на контроллер, используя следующий код:

Route::get('/something.html', array('uses' => 'MyController@getView'));

У меня возникли проблемы с выяснением того, как я могу передать переменную из этого маршрута в контроллер. В этом случае я хотел бы передать значение идентификатора действию контроллера.

Возможно ли это в Laravel? Есть ли другой способ сделать это?


person Josh Pennington    schedule 05.09.2014    source источник
comment
Прочтите на laravel.com/docs/routing#route-parameters Ваш .html суффикс действительно необходим на вашем сайте?   -  person JofryHS    schedule 05.09.2014
comment
Я это читал. Ничто там не охватывает то, что я хотел бы сделать. Я пытаюсь передать контроллеру информацию, не содержащуюся в URL-адресе. Суффикс .html — это то, что я хотел бы сохранить, если это возможно.   -  person Josh Pennington    schedule 05.09.2014
comment
Затем просто POST на свой маршрут, помните, что HTTP не имеет состояния. stackoverflow.com/ вопросы/13200152/   -  person JofryHS    schedule 05.09.2014


Ответы (1)


Вы не даете нам достаточно информации, поэтому вам нужно задать себе два основных вопроса: откуда берется эта информация? Можете ли вы получить доступ к этой информации внутри вашего контроллера, не передавая ее через файл route.php?

Если вы собираетесь как-то создать эту информацию в вашем файле «routes.php»:

$information = WhateverService::getInformation();

Вы не можете передать его здесь вашему контроллеру, потому что ваш контроллер на самом деле не запускается в этом файле, это просто список доступных маршрутов, которые могут или не могут быть затронуты в какой-то момент. При попадании на маршрут Laravel запускает маршрут через другую внутреннюю службу.

Но вы, вероятно, сможете использовать ту же самую строку кода в своем контроллере:

class MyController extends BaseController {

    function getView()
    {
        $information = WhateverService::getInformation();

        return View::make('myview')->with(compact('information'));
    }

}

В MVC контроллеры предназначены для получения HTTP-запросов и создания информации через модели (или службы или репозитории) для передачи в ваши представления, которые могут создавать новые веб-страницы.

Если эта информация есть у вас на странице и вы хотите передать ее на свой маршрут something.html, используйте метод POST вместо GET:

Route::post('/something.html', array('uses' => 'MyController@getView'));

И внутри вашего контроллера получите эту информацию через:

class MyController extends BaseController {

    function getView()
    {
        $information = Input::get('information');    

        return View::make('myview')->with(compact('information'));
    }

}
person Antonio Carlos Ribeiro    schedule 05.09.2014
comment
Ваш метод работает. Я могу просто использовать ту же информацию, что и для определения, хочу ли я, чтобы этот маршрут работал в моем контроллере. - person Josh Pennington; 05.09.2014