我在使用Laravel 4.1和刀片模板引擎发布表单时遇到问题。问题似乎是包含http://的完整URL包含在表单操作属性中。如果我硬编码表单手动打开html并使用相对URL,它可以正常工作,但是,当它有完整的URL时,我得到一个例外。
routes.php文件
Route::any("/", 'HomeController@showWelcome');
HomeController.php
public function showWelcome()
{
echo($_SERVER['REQUEST_METHOD']);
return View::make('form');
}
form.blade.php中的表单开始标记
{{ Form::open(["url" => "/","method" => "post","autocomplete" => "off"]) }}
{{ Form::label("username", "Username") }}
{{ Form::text("username", Input::old("username"), ["placeholder" => "john.smith"]) }}
{{ Form::label("password", "Password") }}
{{ Form::password("password", ["placeholder" => ""]) }}
{{ Form::submit("login") }}
{{ Form::close() }}
因此,如果我在浏览器中访问我的家庭目录,我会看到我创建的表单。如果我填写表单详细信息并单击提交,我只是被带到同一页面 - 请求方法仍然是GET,如echo所示($ _ SERVER ['REQUEST_METHOD']);
我注意到了全部
http://localhost/subdir/public/
url用于表单标记。如果我硬编码表单打开标记,例如
<form action="/subdir/public/" method="post">
它工作正常,$ _SERVER ['REQUEST_METHOD']显示为post。
我在这里做错了什么?
答案 0 :(得分:0)
您是否为帖子创建了路线?
示例:
{{Form::open(["url"=>"/", "autocomplete"=>"off"])}} //No need to later add POST method
在Route.php中
Route::post('/', 'YouController@postLogin');
答案 1 :(得分:0)
您尚未设置处理POST的路线。你可以通过几种方式做到这一点。
如上所述:
Route::post('/', 'HomeController@processLogin');
请注意,如果您坚持使用现有的Route::any
,`Route::post
需要在它之前,因为Laravel按顺序处理它们(我相信)。
你也可以使用:
在Controller方法showWelcome
中处理它
if (Input::server("REQUEST_METHOD") == "POST") {
... stuff
}
我更喜欢单独的路线方法。我倾向于避免Route::any
,并且在我的登录页面中使用Route::get
和Route::post
来分别处理表单的显示和处理。