2013-11-29 4 views
1

Могу ли я получить действие контроллера из заданного URL?Получить действие контроллера из url, laravel

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

something.com/content/list - покажет расположение 1.

something.com/admin/content/list - покажет компоновки 2.

(Но они должны быть сформированы по тому же контроллеру)

Я добавил фильтр для определения рисунка 'admin/*' для этой цели. Теперь мне нужно вызвать действие, требуемое остальной частью URL ('content/list' или что-нибудь, что появится там). Значит, может быть что-то после admin/ это может быть foo/1/edit (в этом случае должен быть вызван контроллер foo), или он может быть bar/1/edit (в этом случае должен быть вызван контроллер бара). Вот почему имя контроллера должно генерироваться динамически с URL-адреса, который фильтр захватывает,

Итак, я хочу получить действие контроллера из URL-адреса (содержимого/списка), а затем вызвать это действие контроллера изнутри фильтра.

Можно ли это сделать?

+0

Как вы создали маршруты для них? Можете ли вы опубликовать маршруты, связанные с ними? –

+0

Можете ли вы показать маршруты для них? –

ответ

2

Спасибо всем, кто принимал участие.

Я только что нашел решение своей проблемы в другой теме. HERE

Это то, что я сделал.

Я не мог найти эти методы в документации. Надеюсь, это тоже поможет другим.

0

Вы можете использовать RESTful Controller

Route:controller('/', 'Namespace\yourController'); 

Но метод должны быть префиксом HTTP глаголом, и я не уверен, может ли содержать больше сегмент URL, в вашем случае, я предлагаю просто использовать:

Route::group(array('prefix' => 'admin'), function() 
{ 
    //map certain path to certain controller, and just throw 404 if no matching route 
    //it's good practice 
    Route::('content/list', '[email protected]'); 

}); 
+0

Это был бы один из способов добиться того, чего я хочу. Но дело не в этом. Мне было интересно, можно ли получить имя конкретного действия контроллера из динамических URL-адресов, а затем вызвать этот контроллер независимо от того, что мы получаем в URL-адресе. –

0

используйте это в функции контроллера -

if (Request::is('admin/*')) 
{ 
    //layout for admin (layout 2) 
}else{ 
    //normal layout (layout 1) 
} 
+0

Я уже сделал это. Теперь мне нужно посмотреть, что найдено после «admin /», а затем вызвать контроллер, соответствующий этому URL-адресу. Посмотрите на редактирование, которое я разместил в вопросе. –

+0

читайте отдельный сегмент uri, используя '$ segment = Request :: segment (1);' и затем перенаправляйте соответственно. Как изменить значение параметра, например, 1,2.в зависимости от параметра, который необходимо использовать для принятия решения о перенаправлении. –

+0

Redirect не будет работать для меня, потому что это изменит текущий URL-адрес с 'admin/foo/1/edit' на 'foo/1/edit'. Мне понадобится часть «admin» в URL-адресе, чтобы определить, является ли ее обычным пользователем или администратором. –

0

Вы можете использовать Request::segment(index), чтобы получить часть/сегмент url

// http://www.somedomain.com/somecontroller/someaction/param1/param2 
$controller = Request::segment(1); // somecontroller 
$action = Request::segment(2); // someaction 
$param1 = Request::segment(3); // param1 
$param2 = Request::segment(3); // param2 
Смежные вопросы