未找到列:1054未知列' _token'在'字段列表' Laravel

时间:2017-03-18 04:53:01

标签: php laravel

我尝试更新我的表类别的记录,但它显示错误

  

未找到列:1054未知列' _token'

路线

Route::post('/categorias/edit/{id}', 'CategoryController@update');

控制器

public function update(Request $request, $id)
{
    $data = request()->all();
    Categoria::where('id', '=', $id)->update($data);
    return redirect()->to('categorias');
}

模型

class Categoria extends Model
{
    protected $table = 'categoria';
    protected $fillable = ['id','codigo','nombre','descripcion','estado'];

表格

{{ Form::open(array('url' => url('categorias/add') , 'class'=>'form-horizontal' , 'id'  => 'formulario' , 'method' => 'POST')) }}

{{ csrf_field() }}
<input id="idcate" name="id" type="hidden" placeholder="" class="form-control input-md" required="">
<input id="txtcodigo" name="codigo" type="text" placeholder="" class="form-control input-md" required="">

<input id="txtnombre" name="nombre" type="text" placeholder="" class="form-control input-md" required="">

<textarea class="form-control" id="txtdescripcion" name="descripcion"></textarea >

<select id="cboestado" name="estado" class="form-control">
      <option value="0">NO ACTIVO</option>
      <option value="1">ACTIVO</option>
</select>
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-primary">Guardar</button>
{{ Form::close() }}

记录在一个表格中,我使用相同的表格进行编辑和添加新记录,只有通过单击编辑按钮,我才能更改操作

$('#formulario').attr('action', '{{ url("categorias/edit")}}'+ "/"+ $('#idcate').val());

5 个答案:

答案 0 :(得分:15)

您的错误来自

$data = request()->all();
//which includes '_token'
//coming from csrf_field()

改为

$data = request()->except(['_token']);
//same as $request->except('_token');

答案 1 :(得分:2)

只需在您的控制器上更改

Categoria::find($id)->update($data)

答案 2 :(得分:0)

我不同意接受的答案。

从我的角度来看,最好使用带有数组作为名称属性的表单模型绑定(请参见How to use Laravel form model binding with array as name attribute?)。

{{ Form::model(['user' => $user], array('class'=>'form-horizontal')) }}
    {{ Form::label('user[email]', 'Email Address') }}
    {{ Form::text('user[email]') }}
{{ Form::close() }}

在控制器中,您可以使用以下代码访问用户数据,而不必担心提交时传输的其他数据(例如_method,_token,submit等):

$request->input('user');

如果要使用此方法,则还必须更新验证代码。

Rails(与我一起工作的另一个框架)中的表单模型绑定具有更好的实现,呈现的方法是默认方法。

答案 3 :(得分:0)

public function update(Request $request){
       
        User::where('id',Auth::user()->id)->update([
            'email' => $request->email,
            
        ]);

         return redirect()->to('categorias');

    }

答案 4 :(得分:0)

这个问题的答案在正确的程序上是错误的,您应该做的是过滤$ request变量接收的数据,这样做,创建一个数组并捕获感兴趣的字段。

这是基础,我个人将包括其他几个验证,在处理安全性时,我可以预见很多事情,但是对于您而言,更新就足够了,而不会出现重大问题:

use Illuminate\Support\Facades\Auth; use App\User;         
     /**
     * This is just a demo, modify it according to your needs, include Facades\Auth in the header of the controler to search for the logged in user (Auth::user ())
     *
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
         $use = Auth::user()->name;
         $user = User::where([['id', $id], ['name', $use]]);
         $request->validate([
          'name'=>'required',
          'email'=>'required'
         ]);
         $array = array(
          'name' => $request->get('name'),
          'email' => $request->get('email')
         );
         $user->update($array);
         return redirect()->route('home')->with('success','Update successfully');

      }