我正在为帖子创建一个编辑页面。我宁愿创建一个html表单而不是使用FORM ::所以我真的可以学习。当我尝试将数据提交给正确的控制器方法时,我遇到了问题。
我正在使用的教程说使用
{!! Form::open(['action' => ['PostsController@update', $post->id], 'method' => 'POST'])!!}
利用我有限的知识,我试图将其重新创建为
<form action="{!! Route::post('/posts', ['PostsController@update', $post->id]) !!}" method="POST">
我正在使用<input name="_method" type="hidden" value="PUT">
我得到的错误是“
类Illuminate \ Routing \ Route的对象无法转换为 字符串(查看: /Users/Chris/code/chris/resources/views/posts/edit.blade.php)
我的web.php文件有Route::resource('posts', 'PostsController');
,直到现在才对其他所有内容起作用。在我的控制器中,我的更新方法有
public function update(Request $request, $id)
{
$this->validate($request, [
'title' => 'required',
'body' => 'required'
]);
// Create Post
$post = Post::find($id);
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect('/')->with('success', 'Post Updated');
}
为我的信息提交更新的正确行动是什么?
提前非常感谢!
答案 0 :(得分:1)
使用以下内容替换表单操作: 有很多解决方案:
1-使用行动方法:
<form action=" {!! action('PostsController@update',$post->id) !!}" method="POST">
2-命名路线
<form action=" {!! route('route-name',$post->id) !!}" method="POST">
3-使用url方法
<form action=" {!! url('/posts',$post->id) !!}" method="POST">
答案 1 :(得分:0)
正如Lagbox在评论中指出的那样:
Route::post('/posts', ['PostsController@update', $post->id])
用于在路线文件中定义路线。要获取网址,您可以执行以下操作之一:
硬编码uri
action="/posts/{{ $post->id }}"
使用url()
帮助
action="{{ url("posts/$post->id") }}"
或action="{{ url("post", $post->id) }}"
使用route()
帮助(这只有在您为路线命名时才有效)
action="{{ route('the-route-name', $post->id) }}"
使用操作助手
action="{{ action('PostsController@update', $post->id) }}"
以下是各种网址助手的link。我在这里的主要建议是主要坚持只使用其中一个项目。
此外,您的代码应该以现在的方式运行,但通常使用REST(或Laravel使用休息的方式),您可以提出PUT
或PATCH
更新请求而不是一个POST
请求。
但是,标准html表单仅支持GET
和POST
,因此Laravel为您spoof the form method提供了一种方式:
<input type="hidden" name="_method" value="PUT" />
答案 2 :(得分:0)
非常感谢Lagbox。我用了
<form action=" {!! route('route-name',$post->id) !!}" method="POST">
它完美无缺!
答案 3 :(得分:0)
尝试一下 edit.blade.php文件
<form action="{{url('user', [$users->id])}}" method="POST">
@csrf
@method('PUT')
<div class="kt-portlet__body">
<div class="form-group row">
<div class="col-lg-6">
<label>First Name:</label>
<input type="text" name="first_name" class="form-
control" value="{{$users->first_name}}">
@error('first_name')
<strong class="invalid-feedback d-block">{{ $message
}}</strong>
@enderror
</div>
<div class="col-lg-6">
<div class="form-group">
<label>Last Name:</label>
<input type="text" name="last_name" class="form-
control" value="{{$users->last_name}}">
@error('last_name')
<strong class="invalid-feedback d-block">{{
$message }}</strong>
@enderror
</div>
</div>
</div>
<div class="form-group row">
<div class="col-lg-6">
<label>Password:</label>
<input type="password" name="password" class="form-
control" id="password" value="{{$users->password}}">
@error('password')
<strong class="invalid-feedback d-block">{{
$message }}</strong>
@enderror
</div>
<div class="col-lg-6">
<div class="form-group">
<label>Confirm Password:</label>
<input type="password"
name="password_confirmation" class="form-control"
value="{{$users->password}}">
@error('password_confirmation')
<strong class="invalid-feedback d-block">{{
$message }}</strong>
@enderror
</div>
</div>
</div>
<div class="form-group row">
<div class="col-lg-6">
<label>Email:</label>
<input type="text" name="email" class="form-control"
value="{{$users->email}}">
@error('email')
<strong class="invalid-feedback d-block">{{ $message }}</strong>
@enderror
</div>
<div class="col-lg-6">
<div class="form-group">
<label>Mobile:</label>
<input type="text" name="mobile_number"
class="form-control" value="{{$users->mobile_number}}">
@error('mobile_number')
<strong class="invalid-feedback d-block">{{
$message }}</strong>
@enderror
</div>
</div>
</div>
</div>
<div class="kt-portlet__foot">
<div class="kt-form__actions">
<div class="row">
<div class="col-lg-6">
<button type="submit" class="btn btn-brand"
value="Update" >Update</button>
<a href="{{route('user.index')}}" class="btn btn-
secondary">Cancel</a>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
Routes=> web.php
Route::Resource('user','UsersController');