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

Posted

技术标签:

【中文标题】为啥使用 Resourceful 控制器时出现“找不到方法”?【英文标题】:Why is 'method not found' appearing when using Resourceful controller?为什么使用 Resourceful 控制器时出现“找不到方法”? 【发布时间】:2013-09-03 15:06:35 【问题描述】:

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

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

有谁知道问题出在哪里?

【问题讨论】:

您尝试的哪些 URL 不起作用?请注意,resourceful controller 带有一个特定模式,说明它们如何映射到控制器中的特定方法,包括考虑 HTTP 方法(GET、PUT、POST、DELETE)。请参阅上面链接中的表格。 你点击哪个网址? store 函数只有在执行 POST 请求时才会找到 【参考方案1】:

您需要先了解有关 Restful 控制器的更多信息。如果你仔细看docs page,在桌子上..

你的行动store 说:

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

意思是:

    store 只能在使用 POST 请求时触发(上表中的verb)。 path 是 /resource,在您的情况下为 api/v1/contact 如果您要使用命名路由重定向到它,您将使用路由名称(例如:Redirect::route('api/v1/contact.create') 转到添加页面)注意:重定向到 store 没有意义,所以我用 create 代替

回到你的问题..

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

【讨论】:

也许我表达得不够清楚。但是,是的,我正在尝试通过使用 js 完成的发布请求来丰富 store 方法。我将一些数据作为 json 发送。我尝试将方法名称更改为 postStore,结果是一样的。 code $http( url: '/api/v1/contact', 方法: 'POST', 数据: p ).success( function( response ) def.resolve( response ); );code 当我尝试使用 url /api/v1/contact/store 时,我得到了方法不允许的异常。我不知道我错过了什么【参考方案2】:

我发现在我最初使用 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>

【讨论】:

查看我的最新评论,这应该是对您问题的评论或编辑,因为它不是答案。 ;)

以上是关于为啥使用 Resourceful 控制器时出现“找不到方法”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在尝试用 110 渲染站点时出现错误?

为啥在尝试控制台记录我的 $.each 时出现错误 [关闭]

为啥运行“pip install -r requirements.txt”时出现错误“找不到满足要求 scipy==1.5.3 的版本”?

使用sudo命令时出现如下错误,为啥应当如何处理

为啥 Xamarin 会在单击按钮时出现错误?

为啥在 Eloquent 模型中调用方法时出现“不应静态调用非静态方法”?