【问题标题】:laravel form post instead of putlaravel 形式 post 而不是 put
【发布时间】:2014-08-14 10:34:56
【问题描述】:

这是我的表格:

{{ Form::model($data, array(
    'route' => array('waitingtimes.update', $data->id),
    'class' => 'mainInformationContrainer',
    'method' => 'put'
)) }}

当我提交表单时,我得到了

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

虽然我已经将请求设置为put

你能帮帮我吗?

编辑 1

我注意到 html 的表单是

<form method="POST" action="http://localhost:8082/test/public/waitingtimes/2" accept-charset="UTF-8" class="mainInformationContrainer">
</form>

是post不放,

编辑 2

问题是因为我将route 输入错误为rout,但我没有收到此异常

Trying to get property of non-object

这是视图:

{{Form::model($data, array(
'route' => array('waitingtimes.update', $data->id)
, 'class' => 'mainInformationContrainer',
'method' => 'put'
))}}
<ul>
    <li>
        <label>First Time:</label>
        <div class="oneInfo">
            {{ Form::text('startTime', $value=null, array('class' => 'time ui-timepicker-input', 'id' => 'startTime', 'autocomplete' => 'off'))}}
            <span class="errorMessage">
                <?php
                echo $errors->first('startTime');
                ?>
            </span>
        </div>
    </li>
    <li>
        <label>End Time:</label>
        <div class="oneInfo">
            {{Form::text('endTime', $value=null, array('class' => 'time ui-timepicker-input', 'id' => 'endTime'))}}
            <span class="errorMessage">
                <?php
                echo $errors->first('endTime');
                ?>
            </span>
        </div>
    </li>
    <li>
        <label>Value:</label>
        <div class="oneInfo">
            {{Form::text('value', $value=null, array())}}
            <span class="errorMessage">
                <?php
                echo $errors->first('value');
                ?>
            </span>
        </div>
    </li>
    <li>
        <input type="submit" value="Save Changes"/>
        <input type="button" value="Cancle" class="cancelButton"/>
    </li>
</ul>
{{ Form::close() }}

这是控制器update

$input = Input::all();
        $validation = Validator::make($input, WaitingTimes::$rules);
        if ($validation->passes()){}else{
            return Redirect::route('waitingtimes.edit')->withInput()->withErrors($validation)->with(array(
                'verticalMenu'=>'none',
                'verticalMenuTab' => 'none',
                'data' => $input
            ));
        }

请注意,此 html 刀片代码用于编辑数据,当我调用编辑函数时它工作正常,当用户尝试编辑信息但验证失败时,我也使用它来重定向

【问题讨论】:

  • 是的,HTML 表单只接受 POST 和 GET 方法,laravel 检查发布的_method 属性的值,laravel 表单助手为此创建一个隐藏输入(&lt;input name="_method" type="hidden" value="PUT"&gt;)。这是一个 post 请求,但它调用了 put 处理程序。
  • @undefined 那么为什么会发生异常呢?
  • 你也可以发布你的Routes吗?
  • @Unnawut 这很容易Route::resource('waitingtimes', 'WaitingtimesController');
  • Input::all()返回一个数组,你把它当作一个对象,$data-&gt;id,应该是$data['id']

标签: php laravel laravel-4 blade


【解决方案1】:

我找到了解决办法,

这是

return Redirect::back()->withInput()->withErrors($validation)->with(array(
                'verticalMenu'=>'none',
                'verticalMenuTab' => 'none',
                'data' => $input
            ));

感谢这个问题 Laravel form model binding

【讨论】:

【解决方案2】:

您需要告诉您的表单您将使用方法PUT

{{ Form::model($data, array(
    'route' => array('waitingtimes.update', $data->id),
    'class' => 'mainInformationContrainer',
    'method' => 'put',
)) }}

请注意,您仍然会在表单中看到 method = "POST",但 Laravel 会在您的表单中添加一个名为 _method 的隐藏字段。见http://laravel.com/docs/html#opening-a-form

【讨论】:

  • 我已经这样做了,但这是一个错字,我忘了把它放在问题中,然后我把它放在问题中,但有人编辑了问题并将其删除。
【解决方案3】:

您需要在创建表单时指定方法,将其添加到您的 Form::model 数组中:

'method' => 'PUT'

【讨论】:

  • 我已经这样做了,我忘了把它放在问题中,结果是一样的
  • 那么你得到表单中的隐藏字段名“_method”了吗? (它是由laravel生成来欺骗PUT方法的)
  • 不是,我的意思是在你运行代码后查看视图,然后在浏览器上点击“查看源代码”,在运行时查看表单元素,看看隐藏的表单名称“_method”是否有值添加了“put”。
  • 现在 put 或 post 没有问题,我编辑了问题,问题是别的,我只是打错了rout 错误
  • 那么对你有好处,顺便说一句,只是一个建议,你可能想使用 {{{$errors->first('startTime')}}} 来处理视图中的所有错误,而不是使用 echo更简洁的代码。
猜你喜欢
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 2016-06-14
  • 2015-07-27
  • 1970-01-01
相关资源
最近更新 更多