Laravel使用PUT方法为PUT路由形成html

Ric*_*wan 27 php forms routes put laravel

我在我的路线中有这个:

+--------+---------------------------+--------------+---------------------------                                                                                                                ---------+----------------+---------------+
| Domain | URI                       | Name         | Action                                                                                                                                             | Before Filters | After Filters |
+--------+---------------------------+--------------+---------------------------                                                                                                                ---------+----------------+---------------+
|        | GET|HEAD /                |              | postcontroller                                                                                                                                     | auth           |               |
|        | GET|HEAD login            |              | homecontroller@dologin                                                                                                                             |                |               |
|        | POST login                |              | homecontroller@dologin                                                                                                                             |                |               |
|        | GET|HEAD logout           |              | homecontroller@dologout                                                                                                                            |                |               |
|        | GET|HEAD post             | post.index   | postcontroller@index                                                                                                                               |                |               |
|        | GET|HEAD post/create      | post.create  | postcontroller@create                                                                                                                              |                |               |
|        | POST post                 | post.store   | postcontroller@store                                                                                                                               |                |               |
|        | GET|HEAD post/{post}      | post.show    | postcontroller@show                                                                                                                                |                |               |
|        | GET|HEAD post/{post}/edit | post.edit    | postcontroller@edit                                                                                                                                |                |               |
|        | PUT post/{post}           | post.update  | postcontroller@update                                                                                                                              |                |               |
|        | PATCH post/{post}         |              | postcontroller@update                                                                                                                              |                |               |
|        | DELETE post/{post}        | post.destroy | postcontroller@destroy 
Run Code Online (Sandbox Code Playgroud)

现在,我想制作一个将使用PUT方法的表单html.这是我的代码:

<form class="col-md-12" action="<?php echo URL::to('/');?>/post/<?=$post->postID?>" method="put">
    <div class="form-group">
        <textarea type="text" class="form-control input-lg" placeholder="Text Here" name="post"><?=$post->post?></textarea>
    </div>
    <div class="form-group">
        <button class="btn btn-primary btn-lg btn-block" type="submit" value="Edit">Edit</button>
    </div>
</form>     
Run Code Online (Sandbox Code Playgroud)

但我不会将表单提交到post.edit.

我用谷歌搜索,我得到了必须使用的解决方案

{{form:...etc
Run Code Online (Sandbox Code Playgroud)

但是,我希望表单仍然可以通过CSS样式完成.有没有解决方案呢?谢谢

Edg*_*zco 38

您可以添加css clases以及刀片模板所需的任何类型的属性,请尝试以下操作:

{{ Form::open(array('url' => '/', 'method' => 'PUT', 'class'=>'col-md-12')) }}
.... wathever code here
{{ Form::close() }}
Run Code Online (Sandbox Code Playgroud)

如果您不想采用刀片方式,则可以添加隐藏输入.这是Laravel的形式,无论如何:

注意:由于HTML表单仅支持POST和GET,因此将自动在表单中添加_method隐藏字段来欺骗PUT和DELETE方法.(Laravel docs)

<form class="col-md-12" action="<?php echo URL::to('/');?>/post/<?=$post->postID?>" method="POST">

<!-- Rendered blade HTML form use this hidden. Dont forget to put the form method to POST -->

<input name="_method" type="hidden" value="PUT">

<div class="form-group">
    <textarea type="text" class="form-control input-lg" placeholder="Text Here" name="post"><?=$post->post?></textarea>
</div>
<div class="form-group">
    <button class="btn btn-primary btn-lg btn-block" type="submit" value="Edit">Edit</button>
</div>
</form>     
Run Code Online (Sandbox Code Playgroud)


Par*_*don 34

如果您使用的是HTML表单元素而不是Laravel表单生成器,则必须放在method_field表单开始标记和结束标记之间.通过这样做,您可以明确定义表单方法类型.

<form>
{{ method_field('PUT') }}
</form>
Run Code Online (Sandbox Code Playgroud)

  • 您可以将 `@method('PUT')` 用于 [Laravel 5.7+](https://laravel.com/docs/5.7/routing#form-method-spoofing) (3认同)

小智 18

只需在表单内的某处使用

@method('PUT')
Run Code Online (Sandbox Code Playgroud)

  • 这是laravel 5.7的官方版本 (2认同)

Rad*_*dez 12

很简单,你只需要method_field('PUT')像这样使用:

HTML:

<form action="{{ route('route_name') }}" method="post">
    {{ method_field('PUT') }}
    {{ csrf_field() }}
</form>
Run Code Online (Sandbox Code Playgroud)

要么

<form action="{{ route('route_name') }}" method="post">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
Run Code Online (Sandbox Code Playgroud)

问候!