2013-11-07 4 views
1

У меня было это работает, но теперь маршрут больше не найден, и я не понимаю почему.laravel 4 route not found - по умолчанию показать метод

В яваскрипте функции Я, сделав АЯКС пост к функции с этим URL:

url: '/customers/storeajax', 

В моем файле routes.php У меня есть следующие маршруты:

Route::post('customers/storeajax', array('as'=>'storeajax', 'uses' => '[email protected]')); 

Route::post('customers/updateajax/{id}', array('as'=>'updateajax','uses' => '[email protected]')); 


Route::resource('customers', 'CustomersController'); 

Теперь, когда я попробуйте POST на путь storeajax. Я получаю ModelNotFoundException, который для меня означает, что маршрут не найден, поэтому по умолчанию используется метод отображения контроллера по умолчанию. В журнале ошибок я могу видеть следующую запись:

#1 [internal function]: CustomersController->show('storeajax') 

, подтверждающий его обработку файла storeajax в качестве параметра.

я разместил мои дополнительные маршруты выше маршрут ресурсов по умолчанию

Я имел эту работу, прежде чем я не могу видеть, где я не так.

Кроме того, эти маршруты размещены в группе:

Route::group(array('before' => 'sentryAuth'), function() {} 

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

URL-адрес в браузере идет правильно, как: http://greenfees.loc/customers/storeajax (который я могу увидеть в Firebug консоли

Я использую POST как метод Ajax - только для подтверждения

Может кто-нибудь понять, почему это маршрут не работает, и то, что я пропустил

Update:

Вот метод внутри контроллера:

public function storeAjax()  
{   
$input = Input::all();  
$validation = Validator::make($input, Customer::$rules);  
if ($validation->passes())  
    {    
    $customer = $this->customer->create($input);    
    return $customer;   
    }  
return Redirect::route('customers.create')->withInput() 
    ->withErrors(validation)    
    ->with('message', 'There were validation errors.');  
} 

Я на 99% уверен, что мой маршрут не достигает этого метода (я тестировал с помощью vardump внутри метода), и проблема связана с моим маршрутом customer/storeajax не может быть найдена.

То, что я думаю, что это происходит как customer/storeajax не найден в списке маршрутов, начиная с customer он затем недобросовестными на маршрут ресурса, который появляется в списке, и думает, что это успокоительный запрос и перевод его в качестве customer маршрута, который defualts методы show и используя storeajax в качестве параметра, который затем бросает ошибку modelnotfoundexception, потому что не может найти клиент с идентификатором «storeajax»

Это свидетельствует в журнале детализация вызова методы шоу, как указано выше ,

По какой-то причине мой маршрут для '/ customers/storeajax' не найден, даже если он кажется действительным и отображается перед ресурсом клиентов. Modelnotfoundexception - красная селедка, потому что причина связана с тем, что маршруты не соответствуют ресурсовому контроллеру клиентов, когда он не может найти маршрут.

+0

Попробуйте (в вашем JS): 'url: '{{URL :: route (" storeajax ")}}',' (предполагается, что вы используете лезвие) –

+0

Привет. Скрипт находится в отдельном скрипте не в шаблоне клинка, поэтому он не может использовать этот метод? – Ray

ответ

1

Я решил эту проблему путем переименования метода в контроллере «newAjax», а также обновить маршрут:

Route::post('customers/new', array('as'=>'newajax','uses' => '[email protected]')); 

терминов store Я предполагаю, используется системой (успокоительное?) И создавая неожиданное поведение , Я проверил его в ряде других функций моего контроллера - добавив термин store в качестве префикса к методу, а затем обновляя маршрут и каждый раз, когда он сработал.

Что-то узнал.

+0

Это похоже на проблему, связанную с окружающей средой. В Windows + PHP 5.4.16 У меня нет проблем. На CentOS + PHP5.4.23 у меня возникает одна и та же проблема: «PUT» на «Route :: resource» («задачи», «TasksController»); 'запускает' TasksController.show() 'вместо' TasksController.update() '. Weird! –

2

Неисправен маршрут NotFoundHttpException.

Если вы получаете ModelNotFoundException потому, что ваш маршрут стрельбы и логика пытается найти модель, которым он не может каким-то образом, и это воспитывает не найдена ошибка.

Вы используете FindOrFail()? Это пример метода, который вызывает это исключение. BelongsToMany() - другой, который может поднять его.

+0

Если контроллер ресурсов существует, если маршрут, такой как моя, не может быть найден, он пытается найти успокоительный метод в контроллере ресурсов. Я установил, что маршрут ресурса должен появиться после любых связанных маршрутов, которые не успокаиваются, чтобы избежать его захвата. Он обрабатывает мой URL как спокойный маршрут к методу show, а затем придумывает ошибку, не найденную моделью. Если я удалю свой контроллер ресурсов в качестве теста, я получаю ошибку маршрутизации, а не флибу, чтобы подтвердить предположение. – Ray

+0

Если вы удалите маршрут, а затем получите маршрут не найденной ошибки, это связано с тем, что маршрут работал нормально раньше. Мое подозрение - 'CustomersController :: storeAjax()' пытается найти модель, которая пытается связать себя с другой моделью через один из связанных с Eloquent методов, которые не существуют. Покажите нам свою модель «Customer» и любые модели, к которой стремится «Клиент». – user1669496