在Laravel 4.1和刀片模板中发布表单

时间:2014-01-25 20:02:58

标签: laravel laravel-4

我在使用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。

我在这里做错了什么?

2 个答案:

答案 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::getRoute::post来分别处理表单的显示和处理。