Laravel 形成 html 与 PUT 路由的 PUT 方法
Laravel form html with PUT method for PUT routes
我的路线中有这个:
+--------+---------------------------+--------------+--------------------------- ---------+----------------+---------------+
| 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
现在,我想创建一个将使用 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>
但是我无法将表单提交到 post.edit。
我用谷歌搜索得到了必须使用的解决方案
{{form:...etc
但是,我希望表单仍然可以通过 CSS 样式来完成。
大佬们有解决办法吗?
谢谢
在您看来blade改为
{{ Form::open(['action' => 'postcontroller@edit', 'method' => 'PUT', 'class' = 'your class here']) }}
<div>
{{ Form::textarea('textareanamehere', 'default value here', ['placeholder' => 'your place holder here', 'class' => 'your class here']) }}
</div>
<div>
{{ Form::submit('Update', ['class' => 'btn class here'])}}
</div>
{{ Form::close() }}
实际上你可以像你的问题一样使用原始形式。但我不推荐它。这就是您学习框架、简单、快速的原因之一。那么,如果有更简单的方法,为什么要使用原始形式。哈哈。以身为印尼人为荣。
您可以添加 css 类,以及您需要 blade 模板的任何类型的属性,试试这个:
{{ Form::open(array('url' => '/', 'method' => 'PUT', 'class'=>'col-md-12')) }}
.... wathever code here
{{ Form::close() }}
如果您不想采用 blade 方式,您可以添加隐藏输入。这是 Laravel 的形式,无论如何:
Note: Since HTML forms only support POST and GET, PUT and DELETE
methods will be spoofed by automatically adding a _method hidden field
to your form. (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>
如果您使用 HTML 表单元素 而不是 Laravel 表单生成器 ,您必须将 method_field
在你们之间
形成开始标记和结束结束。通过这样做,您可以显式定义 表单方法 类型。
<form>
{{ method_field('PUT') }}
</form>
Laravel 5.1
及以上
<form>
@method('PUT')
</form>
在表单中的某处像这样使用
@method('PUT')
很简单,你只需要像这样使用method_field('PUT')
:
方法一:
<form action="{{ route('route_name') }}" method="post">
{{ method_field('PUT') }}
{{ csrf_field() }}
</form>
方法二:
<form action="{{ route('route_name') }}" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
- 更新:我添加了用于最新 Laravel 版本的新方法
方法三:
<form action="{{ route('route_name') }}" method="post">
@method('PUT')
@csrf
</form>
PUT 路由的 PUT 方法
此致!
<form action="{{url('/url_part_in_route').'/'.$parameter_of_update_function_of_resource_controller}}" method="post">
@csrf
<input type="hidden" name="_method" value="PUT"> // or @method('put')
.... // remained instructions
<form>
在 Laravel 8 你可以做:
<form action="{{ route('post.update', $post->id) }}" method="POST">
@method('PUT')
@csrf
</form>
使用路由辅助方法,您可以开始使用路由名称,这比使用完整路由更方便。这就是我 route('post.update', ...)
.
的原因
您肯定需要您要编辑的资源的 ID,因此 $post->id
in route(..., $post->id)
。
@method('PUT')
和 @csrf
与上面的答案完全相同......它看起来更好。
<form method="POST">
@csrf
@method('PUT') // or <input type="hidden" name="_method" value="PUT">
</form>
我的路线中有这个:
+--------+---------------------------+--------------+--------------------------- ---------+----------------+---------------+
| 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
现在,我想创建一个将使用 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>
但是我无法将表单提交到 post.edit。
我用谷歌搜索得到了必须使用的解决方案
{{form:...etc
但是,我希望表单仍然可以通过 CSS 样式来完成。 大佬们有解决办法吗? 谢谢
在您看来blade改为
{{ Form::open(['action' => 'postcontroller@edit', 'method' => 'PUT', 'class' = 'your class here']) }}
<div>
{{ Form::textarea('textareanamehere', 'default value here', ['placeholder' => 'your place holder here', 'class' => 'your class here']) }}
</div>
<div>
{{ Form::submit('Update', ['class' => 'btn class here'])}}
</div>
{{ Form::close() }}
实际上你可以像你的问题一样使用原始形式。但我不推荐它。这就是您学习框架、简单、快速的原因之一。那么,如果有更简单的方法,为什么要使用原始形式。哈哈。以身为印尼人为荣。
您可以添加 css 类,以及您需要 blade 模板的任何类型的属性,试试这个:
{{ Form::open(array('url' => '/', 'method' => 'PUT', 'class'=>'col-md-12')) }}
.... wathever code here
{{ Form::close() }}
如果您不想采用 blade 方式,您可以添加隐藏输入。这是 Laravel 的形式,无论如何:
Note: Since HTML forms only support POST and GET, PUT and DELETE methods will be spoofed by automatically adding a _method hidden field to your form. (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>
如果您使用 HTML 表单元素 而不是 Laravel 表单生成器 ,您必须将 method_field
在你们之间
形成开始标记和结束结束。通过这样做,您可以显式定义 表单方法 类型。
<form>
{{ method_field('PUT') }}
</form>
Laravel 5.1
及以上
<form>
@method('PUT')
</form>
在表单中的某处像这样使用
@method('PUT')
很简单,你只需要像这样使用method_field('PUT')
:
方法一:
<form action="{{ route('route_name') }}" method="post">
{{ method_field('PUT') }}
{{ csrf_field() }}
</form>
方法二:
<form action="{{ route('route_name') }}" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
- 更新:我添加了用于最新 Laravel 版本的新方法
方法三:
<form action="{{ route('route_name') }}" method="post">
@method('PUT')
@csrf
</form>
PUT 路由的 PUT 方法
此致!
<form action="{{url('/url_part_in_route').'/'.$parameter_of_update_function_of_resource_controller}}" method="post">
@csrf
<input type="hidden" name="_method" value="PUT"> // or @method('put')
.... // remained instructions
<form>
在 Laravel 8 你可以做:
<form action="{{ route('post.update', $post->id) }}" method="POST">
@method('PUT')
@csrf
</form>
使用路由辅助方法,您可以开始使用路由名称,这比使用完整路由更方便。这就是我 route('post.update', ...)
.
您肯定需要您要编辑的资源的 ID,因此 $post->id
in route(..., $post->id)
。
@method('PUT')
和 @csrf
与上面的答案完全相同......它看起来更好。
<form method="POST">
@csrf
@method('PUT') // or <input type="hidden" name="_method" value="PUT">
</form>