laravel form post issue

时间:2013-07-07 11:16:48

标签: php laravel laravel-4

我正在使用Laravel框架构建练习应用程序我在其中一个视图中构建了一个表单,该表单设置为发布到同一个视图本身,但是当我点击提交表单时虽然我没有得到所需的输出,但我再次看到原始视图。

这是我的观点 index.blade.php

@extends('master')

@section('container')

<div class="wrapper">

    {{ Form::open(array('url' => '/', 'method' => 'post')) }}
        {{ Form::text('url') }}
        {{ Form::text('valid') }}
        {{ Form::submit('shorten') }}
    {{ Form::close() }}

</div><!-- /wrapper -->

@stop 

和我的 routes.php

Route::get('/', function()
{
return View::make('index'); 
});

Route::post('/', function() 
{
return 'successfull';
});

到目前为止我尝试了什么

  • 我尝试将帖子更改为其他视图并且有效。 但是我希望表单能够发布到同一个视图本身。

  • 我没有返回一个我试图返回的字符串,而是继续查看它 没用。

我做错了什么?

附录

我看到当表单发布帖子请求时,我收到了301 MOVED PERMANENTLY HEADER

7 个答案:

答案 0 :(得分:11)

{{ Form::open(array('url' => ' ', 'method' => 'post')) }}

传递空格,因为网址对我有效。

答案 1 :(得分:2)

我认为这篇文章:Form submits as GET Laravel 4与您的问题有关。我认为问题是因为我不满意它是由一个带有/的表单url引起的。当我在表单中使用post到./ url时遇到问题,我发现了这一点。 github上还有一个错误,似乎与https://github.com/laravel/framework/issues/1804有关。

我知道这是一个老问题,但我发现这个问题有同样的问题,所以希望其他人能得到我的回答。

答案 2 :(得分:1)

您需要确保表单的方法不以/ 结尾才能正确路由。例如,如果您有以下路线:

Route::post('form/process', function()
{
   # code here ...    
});

然后您需要具有以下表单定义:

<form action="/form/process" method="POST">

我希望有所帮助。

答案 3 :(得分:1)

我对OSx + MAMP也有同样的问题,最初我用Raul的解决方案解决了这个问题:

{{ Form::open(array('url' => ' ', 'method' => 'post')) }}

但在与我的朋友协商后,我们得出结论,我的问题是由于这个原因 我的lavarel项目可以通过长期的本地路径来实现,如:

 http://localhost/custom/custom2/...

在此位置根路径(“/”)上的post / get方法无法正常工作。

Lavarel正常工作必须是“vhost”,在这种情况下,根位置“/”上的问题get / post方法不存在。

我的朋友建议我使用http://www.vagrantup.com/

BYE

答案 4 :(得分:0)

Laravel文档中有一些有用的信息。看看这些:

我建议您阅读Resource Controllers文档,因为这样可以更轻松地处理表单。

答案 5 :(得分:0)

好吧,你只是返回视图,所以没有任何改变。您应该将路由绑定到控制器以执行某些逻辑并将数据添加到视图中,如下所示:

<强> index.blade.php

@extends('master')

@section('container')

<div class="wrapper">
     @if (isset($message))
     <p>{{$message}}</p>
     @endif

    {{ Form::open(array('url' => '/', 'method' => 'post')) }}
        {{ Form::text('url') }}
        {{ Form::text('valid') }}
        {{ Form::submit('shorten') }}
    {{ Form::close() }}

</div><!-- /wrapper -->

@stop

您的路线

Routes::any('/', 'home@index');

您是控制器HomeController.php

public function index()
{
     $data = array();
     $url = Input::get('url');
     if ($url)
          $data['message'] = "foo";

     return View::make('index', $data);
}

您也可以在不使用此类控制器的情况下修改当前路线(使用新视图文件)

Route::get('/', function()
{
     return View::make('index'); 
});

Route::post('/', function() 
{
     return View::make('index')->with('message', 'Foo');          
});

答案 6 :(得分:0)

问题在于Apache中的defualt从2.0.51大幅下降并且更高: http://httpd.apache.org/docs/2.2/mod/mod_dir.html#directoryslash

如果您不想更改Apache配置,最佳解决方案是将帖子放在不同的路径中:

GOOD:

Route::get('/', 
  ['as' => 'wizard', 'uses' => 'WizardController@create']);

Route::post('wizard-post', 
  ['as' => 'wizard_store', 'uses' => 'WizardController@store']);

不好:

Route::get('/', 
  ['as' => 'wizard', 'uses' => 'WizardController@create']);

Route::post('/', 
  ['as' => 'wizard_store', 'uses' => 'WizardController@store']);