2015-01-06 2 views
1

Я работаю с Laravel 4.2. У меня есть приложение, которое направляет неправильное представление, хотя URL-адрес правильный. Нажав кнопку, он должен перейти на users.create ([email protected]), но вместо этого маршрутируется в [email protected]. Однако разрешенный URL-адрес правильный, а элемент DOM имеет правильный URL-адрес. Может кто-нибудь мне помочь?Laravel Routing to Wrong View

Вот подам Маршруты:

// Home page 
Route::get('/', '[email protected]'); 

// Define User model to pass through routes 
Route::model('user', 'User'); 

// Create custom route for editing a user 
Route::get('users/edit/{user}', 
    array('as' => 'users.edit', 'uses' => '[email protected]')); 

// Create custom route for showing a user 
Route::get('users/{user}', 
    ['as' => 'users.show', 'uses' => '[email protected]']); 

// Remaining routes 
Route::resource('users', 'UsersController', 
    array('except' => array('edit', 'show'))); 

Вот мой UsersController с двумя функциями в вопросе:

class UsersController extends \BaseController { 

protected $user; 

public function create() 
{ 
    return View::make('users/create'); 
} 

public function show($user) 
{ 
    return View::make('users/show', ['user' => $user]); 
}} 

А вот соответствующие результаты из php artisan routes:

GET:HEAD users/{user} users.show  [email protected] 
GET:HEAD users/create users.create [email protected] 

Спасибо за помощь!

Редактировать: Ответ на проблему состоял в том, чтобы просто переупорядочить маршруты таким образом, чтобы ресурс определялся первым. Я знал, что Laravel захватывает первый маршрут, соответствующий URI, но я до сих пор не понимаю, почему маршрут, который не передан объекту пользователя, будет выбирать маршрут, определенный как users/{user}. Кроме того, я получал доступ к маршруту через link_to_route(), то есть по имени. Почему Ларавель выбрал другой маршрут из той, которую я явно назвал?

Я полагаю, что эти вопросы выходят за рамки первоначального вопроса, но я был бы очень благодарен за дальнейшее объяснение от кого-то. Задача решена!

ответ

2

Первое, что выпрыгивает на меня, - нет пути для «создания». Существует «успокоительный» контроллер, но, возможно, вы хотите просто попробовать ввести маршрут. Мне немного неудобно, используя спокойные маршруты при обслуживании html. В проекте, над которым я работаю, я пытался сохранить его для передачи данных/json, чтобы поддерживать внешнее действие api.

+0

Хм ... Я новичок во всей концепции REST; Наверное, я просто не вижу в этом смысла. Я попробую вручную настроить маршруты и посмотреть, как это происходит. – kendaop

1

Я думаю, что ваша установка маршрутов признает create как {user} в user/{user}, таким образом перенаправлять user/show/create как ваш «пользовательского маршрут для показа пользователя» настройка.

Возможно, вам придется избегать получения строковой переменной сразу после users/ маршрута.

+0

Мой маршрут users.create определяется 'Route :: resource (...)'. Почему это не сработает? – kendaop

+0

@ kendaop Я думаю, что маршрутизация - это всего лишь вопрос обработки строки URI, что означает, что вы действительно не передаете объект 'User' в URI с помощью' {user} 'specifier. Laravel извлекает URI и сопоставляет его с правилами маршрутизации процедурно, сверху вниз. Вот почему вы можете решить проблему, изменив порядок определения маршрутизации. И поскольку URI является только строкой, Laravel не может отличить контроллер, явно указанный с помощью 'link_to_route()' from 'users/{user}'. –