为啥使用 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 控制器时出现“找不到方法”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在尝试控制台记录我的 $.each 时出现错误 [关闭]
为啥运行“pip install -r requirements.txt”时出现错误“找不到满足要求 scipy==1.5.3 的版本”?