Laravel 5.1 - 管理员面板 - 更新用户

时间:2016-05-06 11:50:02

标签: php laravel laravel-5.1

我在编辑用户注册时遇到问题,我需要更新信息用户,但我有问题:

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

我正在使用资源控制器。

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查看页面

{!! Form :: open(['route'=>'admin.user.update','class'=>'form-horizo​​ntal form-label-left']

                )!!}


                <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()!!}

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

更改:

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

致:

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

答案 1 :(得分:0)

更改您的路线,并为其添加用户ID,因为它是一种更新方法:

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

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