5

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

4

7 回答 7

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

传递一个空格作为 url 对我有用。

于 2013-10-09T22:48:58.903 回答
2

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

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

于 2013-09-08T20:58:35.233 回答
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/

再见

于 2014-02-28T10:13:56.760 回答
1

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

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

那么你需要有如下的表单定义:

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

我希望这会有所帮助。

于 2013-10-20T16:35:19.967 回答
0

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

我建议您阅读资源控制器文档,因为它使表单处理变得更加容易。

于 2013-07-07T11:57:17.080 回答
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');          
});
于 2013-07-07T16:44:53.360 回答
0

问题在于从 2.0.51 和更高版本的 Apache 中删除的默认值: http ://httpd.apache.org/docs/2.2/mod/mod_dir.html#directoryslash

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

好的:

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']);
于 2015-08-29T06:43:26.830 回答