2016-05-06 147 views
1

我有一个问题编辑用户注册,我需要更新信息的用户,但我有问题:Laravel 5.1 - 管理面板 - 更新用户

  • 更新电子邮件用户,(错误电子邮件存在的话),我需要忽略电子邮件中用户编辑。
  • 其他信息不会更新。
  • 更新密码如果插入新密码。

我正在使用资源控制器。

UserController.php

namespace dixard\Http\Controllers\Admin; 

use Illuminate\Http\Request; 

use dixard\Http\Requests; 
use dixard\Http\Controllers\Controller; 

// colleghiamo al modello 

use dixard\User; 

// ci serve per validare 
use Validator; 

//per aggionare password 
use Hash;  


public function update(Request $request, User $user) 
     { 

      $id= $user->id; 
      // i want ignora id of user edited 
      $rules = [ 

       'name' => 'required', 

       'lastname' => 'required', 

       'username' => 'required|max:50|', 

       'birth' => 'required', 

       'country' => 'required', 

       'usertype' => 'required', 

       'email' => 'required|email|unique:users'.',email,' . $id, 


      ]; 

      $messages = [ 


       'name.required' => 'Campo nome richiesto', 
       'lastname.required' => 'Campo cognome richiesto', 
       'username.required' => 'Campo username richiesto', 
       'username.max' => 'Campo massimo 50 caratteri', 
       'birth.required' => 'Campo nascita richiesto', 
       'country.required' => 'Campo paese richiesto', 
       'usertype.required' => 'Campo tipologia richiesto', 
       'email.required' => 'Campo email richiesto', 
       'email.email' => 'formato email errato ', 

       'email.unique' => 'Email già esistente', 
       'password.min' => 'Campo password minimo 4 caratteri', 
       'password.max' => 'Campo password massimo 18 caratteri', 



      ]; 


      $validator = Validator::make($request->all(), $rules, $messages); 
      if ($validator->fails()){ 

       return redirect('admin/user')->withErrors($validator); 

      } 
      // if there is not any error go to update 
      else{   

       // if email id different by input, so if email input update also email 
       if($user->email != $request->email){ 

       $s = new User; 

       $data = array(

        'name'    => $request->get('name'), 
       'lastname'  => $request->get('lastname'), 
       'username'   => $request->get('username'), 
       'email'   => $request->get('email'), 
       'password'  => $request->get('password'), 
       'birth'   => $request->get('birth'), 
       'country'  => $request->get('country'), 
       'usertype'   => $request->get('usertype'), 


       ); 

       $s->where($id, $request->get('id'))->update($data); 

       return redirect('admin/user')->with('message', 'Updated successfully'); 
       } 

       // If email input doesnt change update all (not email) 
       else{ 

       $s = new User; 

       $data=array(

        'name'   => $request->get('name'), 
       'lastname'  => $request->get('lastname'), 
       'username'   => $request->get('username'), 

       'password'  => $request->get('password'), 
       'birth'   => $request->get('birth'), 
       'country'  => $request->get('country'), 
       'usertype'   => $request->get('usertype'), 


        ); 

       $s->where($id, '=', $request->get('id'))->update($data); 

       return redirect('admin/user')->with('message-error', 'error'); 


       } 

      } 
     } 

routes.php文件

Route::resource('admin/user','Admin\UserController'); 



Route::bind('user', function($user){ 

    return dixard\User::find($user); 
}); 

模型user.php的

protected $table = 'users'; 


    protected $fillable = [ 

    'name', 
    'username', 
    'lastname', 
    'birth', 
    'profile', 
    'country', 
    'usertype', 
    'email', 
    'password', 
    'social', 
    'confirm_token', 
    'active', 

    ]; 

    // Ogni utente HA tanti prodotti. 

    public function products() 
    { 

     return $this->hasMany('dixard\Product');  

    } 


    protected $hidden = ['password', 'remember_token']; 

    // setare la password ogni volta che viene cambiata 

    public function setPasswordAttribute($valor){ 
     //se non è vuota viene applicato hash 
     if(!empty($valor)) { 

     $this->attributes['password']= \Hash::make($valor); 
     } 


    } 

EDIT.PHP视图页

{!!表::打开([ '路线'=> 'admin.user.update', '阶级'=> '形横形标签左']

   )!!} 


       <input type="hidden" name="_method" value="PUT"> 


        <div class="form-group"> 
        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">Nome<span class="required">*</span> 
        </label> 
        <div class="col-md-6 col-sm-6 col-xs-12"> 
         <input type="text" id="name" name="name" class="form-control col-md-7 col-xs-12" value="{{$user->name}}"> 
        </div> 
        </div> 


        <div class="form-group"> 
        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="lastname">Cognome<span class="required">*</span> 
        </label> 
        <div class="col-md-6 col-sm-6 col-xs-12"> 
         <input type="text" id="lastname" name="lastname" class="form-control col-md-7 col-xs-12" value="{{$user->lastname}}"> 
        </div> 
        </div> 

        .... So for all fields inputs 


         <a href="{{url('admin/user')}}" class="btn btn-warning">cancel</a> 
         <button type="submit" class="btn btn-success">update</button> 
        </div> 
        </div> 


       {!! Form::close()!!} 

谢谢您的帮助!

回答

0

变更路线,和用户ID添加到它,因为它是一个更新方法:

{!! Form::open(['route'=> ['admin.user.update', $user->id], ...])!!} 

您没有将用户标识传递给路由,因此在您的控制器中用户可能为空。在这种情况下,验证将不会通过,因为id为空,所以不会跳过当前用户,并且会检查用户表中的所有记录。

+0

我添加在窗体上:{!! Form :: open(['route'=> ['admin.user.update',$ user-> id],...])!!}现在我有了这个ERROR ----> SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'45'(SQL:更新'users'设置了'name' = test,'lastname' = test,'username' = test,'email' = [email protected] ,'password' = 123456,'birth' = 2008-07-24,'country' =意大利,'usertype' = 0,'updated_at' = 2016-05-06 17:24:54其中'45'为空) –

0

变化:

'email' => 'required|email|unique:users'.',email,' . $id, 

要:

'email' => 'required|email]unique:users,email,'.$id,