【问题标题】:laravel form post issuelaravel 表单发布问题
【发布时间】:2013-07-04 21:37:18
【问题描述】:

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

这是我的看法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

【问题讨论】:

  • Route::any('/', function() { return View::make('index'); });
  • 你到底想做什么??
  • 当你在POST 路由中使用index 视图文件时,你能告诉我结果吗?
  • 1) 您使用什么 URL 访问表单? 2) 您定义了哪些其他路线?
  • @Ragzor - 太好了,所以您可以在shorten.dev/ 上查看该站点?我想你明白我的意思了——你的表单被设置为提交给/,它应该提交给shorten.dev/,而不是localhost:8888/,因为你的代码没有在localhost:8888/“监听”。

标签: php laravel laravel-4


【解决方案1】:
{{ Form::open(array('url' => ' ', 'method' => 'post')) }}

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

【讨论】:

  • Route::post('/', 'UserController@login');除非表单 url 为空,否则不起作用,这仅适用于发布到主页
  • 也对我有用,但有人知道为什么会出现这个奇怪的问题吗?
【解决方案2】:

我认为这个帖子:Form submits as GET Laravel 4 与您的问题有关。我认为我理解的问题是由以 / 结尾的表单 url 引起的。在我的表单中使用 post 到 ./ url 时遇到问题时,我发现了这一点。 github上还有一个bug,好像和https://github.com/laravel/framework/issues/1804有关。

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

【讨论】:

    【解决方案3】:

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

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

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

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

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

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

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

      但在与我的朋友协商后,我们得出的结论是,我的问题是由于以下事实造成的 我的 lavarel 项目可通过长本地路径获得,如:

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

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

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

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

      再见

      【讨论】:

        【解决方案5】:

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

        我建议您阅读 Resource Controllers 文档,因为它使表单处理变得更加容易。

        【讨论】:

          【解决方案6】:

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

          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');          
          });
          

          【讨论】:

          • 您好!非常感谢您的回复,是的,这是正确的做法但是在这种情况下这也不起作用我发现当应用程序发出发布请求时,我得到了 301永久移动标头,因此它只是返回到获取请求,我看到了默认视图。我在 laravel 3 上尝试了同样的事情,它正在工作。不知道这里发生了什么:/
          【解决方案7】:

          问题在于 Apache 从 2.0.51 及更高版本中删除的默认值: 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']);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-06
            • 2018-10-08
            • 2013-12-18
            相关资源
            最近更新 更多