0

我正在尝试使用 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       
}

而且我不知道我做错了什么。我已经在这里搜索,但我一直得到相同的结果。

有谁知道问题出在哪里?

4

2 回答 2

1

你需要先了解更多关于 Restful Controllers 的知识。如果您仔细查看文档页面,那里的桌子上..

你的行动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 代替

回到你的问题..

通过 URL 为“api/v1/contact/store”的浏览器会产生对该路由的 GET 请求,但 store 需要一个 POST 请求。如果您从表单向商店 URL 提交 POST,它会成功,但通过浏览器(GET)访问它肯定会产生错误,指出找不到路由,因为您没有 get 'api/v1/contact /store' 路由声明..

于 2013-08-31T03:07:51.330 回答
0

我发现在我最初使用 javascript 发出的发布请求之后,重定向是触发的,所以它失败了。我不知道为什么。.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>
于 2013-09-02T08:39:22.983 回答