我是Laravel的新人,我不明白如何为编辑帖子制作行动表格和路线
这是我的路线 -
Route::post('/menu', 'MenuController@store');
Route::resource('/menu', 'MenuController');
这是控制器 -
public function update(Request $request, $id)
{
$this->validate($request, [
'menuName' => 'required',
'menuLink' => 'required'
]);
//create new menu
return $id;
// $menus->name = $request->input('menuName');
//$menus->link = $request->input('menuLink');
//$menus->save();
//return redirect('/menu')->with('success', 'Menu updated');
}
返回$ id用于检查" id"会给我,他给我这个 - " {id}"
这是表格 -
<form action = "/menu/{id}" method = "POST">
{{ csrf_field() }}
<input name = "_method" type = "hidden" value = "PUT">
<input type="text" id="menuName" name="menuName" class="input-block-level" placeholder="Menu name">
<input type="text" id="linkName" name="menuLink" class="input-block-level" placeholder="Menu link ">
<button type="submit" class="btn btn-success pull-right">Submit</button>
</form>
我真的搞砸了,不知道我做错了什么。我不明白为什么更新功能会让我回复#34; {id}&#34;不是ID的价值,我怎么能使这一切都有效
答案 0 :(得分:0)
您的视图中没有传递ID,您将其作为字符串传递,您需要创建一个变量并将其设置为正确的ID并将其传递给您的表单。
从中更改您的表单操作
action = "/menu/{id}"
到
action = "/menu/".$id"
或者你可以使用laravel blade
Form::open(['route' => ['menu.update', $id]])
并且不要忘记在最后关闭表单
{!!Form::close!!}
答案 1 :(得分:0)
您对action
属性做错了。将其更改为:
action="/menu/{{ $id }}"
答案 2 :(得分:0)
好的,
你有一个将显示表单的编辑方法,该方法应该返回菜单对象
public function update($id)
{
// get the menu you wan to edit
$menu = Menu::find($id);
// return the form with the menu object
return view('your.form.view', compact('menu'));
}
现在表格应该是这样的
// use that object u returned in the form action
<form action = "/menu/{{ $menu->id }}" method = "POST">
{{ csrf_field() }}
<input name = "_method" type = "hidden" value = "PUT">
<input type="text" id="menuName" name="menuName" class="input-block-level" placeholder="Menu name">
<input type="text" id="linkName" name="menuLink" class="input-block-level" placeholder="Menu link ">
<button type="submit" class="btn btn-success pull-right">Submit</button>
</form>
现在更新方法应该是这样的
public function update(Request $request, $id)
{
$this->validate($request, [
'menuName' => 'required',
'menuLink' => 'required'
]);
// update the data
$bool = Menu::where('id',$id)->update([
'menuName'=> $request->menuName,
'menuLink'=> $request->menuLink,
]);
if(!$bool){
Session::flash('alert','error');
return view('page.index');
}
Session::flash('alert','success');
return view('page.index');
}
第一种方法是&#34;得到&#34;编辑应显示表格, 第二个是更新,应该从表单接收数据(在show方法之后)并使用i来更新。
答案 3 :(得分:0)
我解决了错误---
在更新刀片形式中我添加了foreach
<div class="container">
<div class="row">
@foreach($menus as $menus)
<form action="/menu/{{$menus->id}}" method="POST">
@endforeach
{{ csrf_field() }}
<input name = "_method" type = "hidden" value = "PUT">
<input type="text" id="menuName" name="menuName" class="input-block-level" placeholder="Menu name">
<input type="text" id="linkName" name="menuLink" class="input-block-level" placeholder="Menu link ">
<button type="submit" class="btn btn-success pull-right">Submit</button>
</form>
</div>
</div>
但现在他只编辑了第一篇文章,无论是编辑后切换
这是控制器 -
public function edit($id)
{
$menus = Menu::all();
return view('admin.editmenu')->with('menus', $menus);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'menuName' => 'required',
'menuLink' => 'required'
]);
//create new menu
$menus = Menu::find($id);
$menus->name = $request->input('menuName');
$menus->link = $request->input('menuLink');
$menus->save();
return redirect('/menu')->with('success', 'Menu updated');
}
菜单列表刀片---
@if(count($menus) > 1)
@foreach($menus as $menus)
<tr>
<th scope="row">1</th>
<td>{{$menus->name}}</td>
<td>{{$menus->link}}</td>
<td>{{$menus->created_at}}</td>
<td>{{$menus->updated_at}}</td>
<td>
<button type = "button"class = "btn btn-outline-danger btn-sm">Delete</button>
<a href = "/menu/{{$menus->id}}/edit" class = "btn btn-outline-warning btn-sm">Edit</button>
</td>
</tr>
@endforeach
@else
答案 4 :(得分:0)
好的,我已经得到了并解决了。
我将从路线
开始路由----------
Route::resource('menu', 'MenuController');
后期路线是不必要的,但这并没有影响任何事情
控制器-------
public function edit($id)
{
$menus = Menu::find($id);
return view('admin.editmenu')->with('menus', $menus);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'menuName' => 'required',
'menuLink' => 'required'
]);
//create new menu
$menus = Menu::find($id);
$menus->name = $request->input('menuName');
$menus->link = $request->input('menuLink');
$menus->save();
return redirect('/menu')->with('success', 'Menu updated');
}
在编辑功能中我必须找到ID女巫需要编辑
菜单列表-----------------
@if(count($menus) > 1)
@foreach($menus as $menu)
<tr>
<th scope="row">1</th>
<td>{{$menu->name}}</td>
<td>{{$menu->link}}</td>
<td>{{$menu->created_at}}</td>
<td>{{$menu->updated_at}}</td>
<td>
<button type = "button"class = "btn btn-outline-danger btn-sm">Delete</button>
<a href = "/menu/{{$menu->id}}/edit" class = "btn btn-outline-warning btn-sm">Edit</button>
</td>
</tr>
@endforeach
@else
<p class = "well"> No menu items created!</p>
@endif
我只在“$ menu as $ menu”上将$ menu更改为$菜单,以便明确。
编辑刀片------------
@extends('admin.main')
@section('content')
<div class="container">
<div class="row">
<form action="/menu/{{$menus->id}}" method="POST">
{{ csrf_field() }}
<input name = "_method" type = "hidden" value = "PUT">
<input type="text" id="menuName" name="menuName" class="input-block-level" placeholder="Menu name" value="{{ $menus->name }}">
<input type="text" id="linkName" name="menuLink" class="input-block-level" placeholder="Menu link " value="{{ $menus->link }}">
<button type="submit" class="btn btn-success pull-right">Submit</button>
</form>
</div>
</div>
@endsection
在这里我删除@forena喜欢@Snapey告诉并添加了值选项。 我猜值选项一直给我错误。
谢谢大家的关注并愿意提供帮助!希望有一天我能用自己的知识帮助别人。