未找到laravel 4 route - 默认显示方法

时间:2013-11-07 09:07:07

标签: php laravel laravel-4 laravel-routing

我已经有了这个工作,但现在找不到路线了,我看不出原因。

在javascript函数中,我使用此url为函数创建ajax帖子:

url: '/customers/storeajax',

在我的routes.php文件中,我有以下路线:

Route::post('customers/storeajax', array('as'=>'storeajax', 'uses' => 'CustomersController@storeAjax'));

Route::post('customers/updateajax/{id}', array('as'=>'updateajax','uses' => 'CustomersController@updateAjax'));


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

现在当我尝试POST到storeajax路由时,我得到ModelNotFoundException这对我来说意味着找不到路由所以它默认为默认的客户控制器show方法 - 在错误日志中我可以看到以下条目:

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

确认其将storeajax视为参数。

我已将其他路线放在默认资源路线

之上

在我看不清哪里出错之前,我已经开始工作了。

此外,这些路线被放置在一个组中:

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

只是确保用户登录。虽然我已经删除了组外部和文件顶部,但仍然无法正常工作。

我的浏览器中的网址正确显示为:http://greenfees.loc/customers/storeajax(我可以在firebug控制台中看到

我使用POST作为ajax方法 - 只是为了确认

任何人都可以看到为什么这条路线不起作用以及我错过了什么?

更新

这是控制器内部的方法:

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路由,该路由默认为show方法并使用storeajax作为参数然后抛出错误modelnotfoundexception,因为它无法找到具有id的客户'storeajax'的作品

这是日志详细说明如上所述调用show方法的证据。

因此,出于某种原因,我找不到'/ customers / storeajax'的路线,即使它看起来有效并且出现在客户资源之前。 modelnotfoundexception是一个红色的鲱鱼,原因是当它找不到路线时,路由默认为客户的资源控制者。

2 个答案:

答案 0 :(得分:2)

未找到的路线会引发 NotFoundHttpException

如果你得到一个 ModelNotFoundException 是因为你的路线被触发而你的逻辑试图找到一个模型,它不能以某种方式,它正在提高找不到错误。

您使用的是FindOrFail()吗?这是引发此异常的方法示例。 BelongsToMany()是另一个可能提升它的人。

答案 1 :(得分:1)

我通过将控制器中的方法重命名为'newAjax'并将路由更新为:

来解决这个问题。
Route::post('customers/new', array('as'=>'newajax','uses' => 'CustomersController@newAjax'));

我假设的术语store由系统使用(restful?)并创建意外行为。我在我的控制器中的许多其他函数中测试了它 - 在方法中添加术语store作为前缀,然后在每次失败时更新路由。

学到的东西。