MethodNotAllowedHttpException laravel-4
Posted
技术标签:
【中文标题】MethodNotAllowedHttpException laravel-4【英文标题】: 【发布时间】:2013-07-04 07:27:18 【问题描述】:表格:
Form::open(array('url' => 'user/create', 'files' => true))
路线:
Route::resource('user', 'UserController');
用户控制器.php
class UserController extends BaseController
public function index()
return 'hi11';
//return View::make('home.index');
public function create()
return 'hi22';
//return View::make('home.index');
这段代码给出了Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
【问题讨论】:
为什么要使用create方法?资源控制器旨在通过定义常见的 curd 函数来简化您的任务。 这个方法我想用插入用户到数据库。 因为只有 store 方法是由资源控制器创建的 【参考方案1】:我只是想在这些方面添加我自己的发现...也许这会让其他人免于我刚刚执行的令人头疼的事情。
我也实现了 Route::resource 机制。我无法弄清楚为什么我的创建工作正常,但我的更新却没有。事实证明,您不能完全重用相同的表单代码,执行更新的表单必须使用 PUT 或 PATCH 方法。为什么更新不能是 POST 超出了我的范围。
也就是说,更新的开始表单标签必须是这样的:
Form::model($thing, array(
'method' => 'PUT',
'route' => array('things.update', $thing->id)
)
如果没有指定方法 => PUT,你会得到这个无用的错误。
【讨论】:
真是个烦人的“bug”。 Chrome Dev Tools 和 LiveHTTP Headers 都未能显示问题。谢谢!【参考方案2】:因为您在路由中使用资源控制器,所以您只能使用特定的路径和操作,如文档 http://laravel.com/docs/controllers#resource-controllers 中所述。
user/create ( UserController::create ) 是您需要显示添加新用户的表单的地方。
用户的实际存储应该在用户/存储中完成,即您的表单必须将数据发送到 UserController::store() 方法。
在您的情况下,如果您仅将表单发布到“url”=>“用户”,这应该会自动将数据发送到正确的方法。
【讨论】:
【参考方案3】:Laravel 4 resources have named routes - 只使用那些:
Form::open(array('route' => 'user.create', 'files' => true))
【讨论】:
【参考方案4】:这就是我的做法,它可能对某人有所帮助,可以改进,但这将是主要思想。
@if(isset($data))
Form::open(['route'=>['blog.update', isset($data) ? $data->slug : null],'method' => 'patch','role' => 'form', 'class' => 'blog-form form-horizontal'])
@else
Form::open(['route'=>'blog.store','role' => 'form', 'class' => 'blog-form form-horizontal'])
@endif
【讨论】:
以上是关于MethodNotAllowedHttpException laravel-4的主要内容,如果未能解决你的问题,请参考以下文章