Laravel 5.4编辑帖子不起作用

时间:2017-08-27 21:55:39

标签: php laravel edit

我是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的价值,我怎么能使这一切都有效

5 个答案:

答案 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告诉并添加了值选项。 我猜值选项一直给我错误。

谢谢大家的关注并愿意提供帮助!希望有一天我能用自己的知识帮助别人。