使用Resourceful控制器时为什么会出现“找不到方法”?

时间:2013-08-30 19:47:53

标签: php rest laravel laravel-routing

我正在尝试使用Laravel 4创建一个安静的api但是我总是遇到错误:

  

“Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException”,“message”:“找不到控制器方法。”

我按照routes-first-in-first-out的说明进行操作。但我没有运气。

我的路线如下:

Route::group(array('prefix' => 'api/v1'), function(){
    Route::resource('contact', 'ContactController');
});

Route::get('/', function(){
    return View::make('hello');
});

控制器中的方法看起来像

public function store()
{
 // ... somecode       
}

我不知道我做错了什么。我已经在这里搜索,但我仍然保持相同的结果。

有谁知道问题出在哪里?

2 个答案:

答案 0 :(得分:1)

您需要先了解有关Restful Controllers的更多信息。如果仔细观察docs page,请在桌面上看......

您的行为store说:

Verb    Path        Action  Route Name
POST    /resource   store   resource.store

表示:

  1. store只能在使用POST请求时触发(上表中的verb)。
  2. path是/资源,在您的情况下为api/v1/contact
  3. 如果您要使用命名路由重定向到它,您将使用路由名称(例如:Redirect :: route('api / v1 / contact.create')去添加页面)注意:重定向到商店没有任何意义所以我使用create而不是
  4. 回到你的问题..

    通过浏览器使用“api / v1 / contact / store”URL进行浏览将产生GET请求 到那条路线,但商店需要一个POST请求。如果你从表单提交一个POST到商店URL,它会成功但是通过浏览器(GET)转到它肯定会产生一个错误,说由于你没有得到'api / v1 / contact,所以无法找到路由/ store'route'声明..

答案 1 :(得分:0)

我发现在我最初使用javascript发布的帖子请求之后,重定向是triggero taht,它失败了。 我不知道为什么。 .htacces文件是laravel intalation的原始文件,虚拟主机是:

<VirtualHost *:80>
        ServerName raulcm.laravel
        DocumentRoot /var/www/raulcm.laravel/public
        <Directory /var/www/raulcm.laravel/public>
                Options Indexes FollowSymLinks Includes ExecCGI
                DirectoryIndex index.php
                AllowOverride All
                Order deny,allow
                Allow from all
        </Directory>
        ErrorLog /var/www/raulcm.laravel/logs/error.log
        CustomLog /var/www/raulcm.laravel/logs/access.log common
</VirtualHost>