找不到 Laravel 4 路由 - 默认显示方法


laravel 4 route not found - defaults to show method

我已经有了这个工作,但现在不再找到路线,我看不出为什么。

在一个javascript函数中,我正在用这个网址向函数做一个ajax帖子:

url: '/customers/storeajax',

在我的路由.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');

现在,当我尝试发布到storeajax路由时,我得到了一个ModelNotFoundException对我来说意味着找不到该路由,因此它默认为默认的客户控制器显示方法 - 在错误日志中,我可以看到以下条目:

#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 开头的路由列表中找不到customer/storeajax然后默认为列表中出现的资源路由,并认为这是一个 restful 请求并将其转换为customer路由,该路由会定义到 show 方法并使用 storeajax 作为参数,然后抛出错误modelnotfoundexception,因为它找不到ID 为"storeajax"的客户

这是日志的证据,日志详细说明了对上述 show 方法的调用。

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

找不到路由会引发 NotFoundHttpException

如果您收到ModelNotFoundException是因为您的路由正在触发并且您的逻辑正在尝试查找模型,但它无法以某种方式找到,并且它引发了未找到错误。

你用FindOrFail()吗?这是引发此异常的方法示例。 BelongsToMany()是另一个可能提出这个问题的人。

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

Route::post('customers/new', array('as'=>'newajax','uses' => 'CustomersController@newAjax'));

我认为store术语被系统使用(休息?)并产生意外行为。我在控制器中的许多其他函数中对其进行了测试-将术语store作为前缀添加到方法中,然后更新路由,每次失败时。

学到了一些东西。