2016-05-06 17 views
1

i ein Problem Bearbeitung Benutzer registriert, ich brauche Benutzerinformationen zu aktualisieren, aber ich habe ein Problem:Laravel 5.1 - Panel Admin - Update User

  • Update-E-Mail-Benutzer, (Fehler E-Mail vorhanden ist), ich brauche E-Mail ignorieren, dass Benutzerbearbeitung.
  • Andere Informationen werden nicht aktualisiert.
  • Passwort aktualisieren IF neues Passwort eingegeben.

ich benutze Ressource-Controller.

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); 
}); 

Modell 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 view page

{!! Form :: open ([ 'Weg' => 'admin.user.update', 'class' => 'form horizontale Form-label-links']

   )!!} 


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

Vielen Dank für Ihre Hilfe!

Antwort

0

Ihre Route ändern, und fügen sie den Benutzer-ID, da sie Verfahren ein Update sind:

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

Sie haben die Benutzer-ID nicht an die Route übergeben, daher wird der Benutzer in Ihrem Controller wahrscheinlich null sein. In diesem Fall wird die Validierung nicht bestanden, da die ID null ist. Daher wird der aktuelle Benutzer nicht übersprungen und es werden alle Datensätze in der Benutzertabelle überprüft.

+0

Ich habe auf dem Formular hinzugefügt: {!! Form :: open (['route' => ['admin.user.update', $ user-> id], ...]) !!} Jetzt habe ich diesen FEHLER ----> SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte '45' in 'Where-Klausel' (SQL: Update 'Benutzer' Satz' Name' = Test, 'Nachname' = Test,' Benutzername' = Test, 'E-Mail' = [email protected] , 'password' = 123456,' birth' = 2008-07-24, 'country' = Italien,' usertype' = 0, 'updated_at' = 2016-05-06 17:24:54 wo' 45' ist null) –

0

Wechsel:

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

an:

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