我已经完成了这项工作,但现在找不到一条路线,我不明白为什么。
在一个 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 () {}
这只是确保用户登录。为了测试虽然我已经在组外和文件顶部删除了,但它们仍然不起作用。
我的浏览器中的 url 正确显示为:(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 是一个红鲱鱼,因为原因是当它找不到路由时,路由默认为客户的资源控制器。