2016-10-30 1 views
0

Ich benutze Laravel eingebaute Auth-System, das leicht mit laufenden php artisan make:auth Befehl in einem neuen Laravel-Projekt gefunden werden kann. Bei der Registrierung möchte ich dem Nutzer die Möglichkeit geben, sein Profilbild ebenfalls hochzuladen.Laravel eingebaut Auth mit Benutzerbild

Also habe ich ein neues Feld namens profile_picture im Anmeldeformular hinzugefügt. Wie erhalte ich die Datei vom Backend? Ich habe versucht, das Request $request Argument für die create-Methode nach dem Array $ Hinzufügen von Daten, aber es sagt:

Type error: Argument 1 passed to App\Http\Controllers\Auth\RegisterController::create() must be an instance of Illuminate\Http\Request, none given, called in /home/tawsif/laravel/repto_events/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php on line 33`

Die Registersteuerung:

<?php 

namespace App\Http\Controllers\Auth; 

use App\User; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\RegistersUsers; 
use Illuminate\Http\Request; 


class RegisterController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Register Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles the registration of new users as well as their 
    | validation and creation. By default this controller uses a trait to 
    | provide this functionality without requiring any additional code. 
    | 
    */ 

    use RegistersUsers; 

    /** 
    * Where to redirect users after login/registration. 
    * 
    * @var string 
    */ 
    protected $redirectTo = '/home'; 

    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest'); 
    } 

    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'name' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|min:6|confirmed', 
      'profession' => 'required|min:3', 
      'phone' => 'required|digits:11', 
      'address' => 'required|min:5' 
      // 'profile_picture' => 'required|image' 
     ]); 
    } 

    /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(Request $request, array $data) 
    { 

     $user = User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
      'phone' => $data['phone'], 
      'ssc_year' => $data['ssc'], 
      'hsc_year' => $data['hsc'], 
      'profession' => $data['profession'], 
      'address' => $data['address'], 
     ]); 

     $file = $request->file('profile_picture'); 
     $thumbnail_path = public_path('uploads/propic/thumbnail/'); 
     $original_path = public_path('uploads/propic/original/'); 
     $file_name = 'user_'. $user->id .'_'. str_rand(32) . '.' . $file->getClientOriginalExtension(); 
     Image::make($file) 
       ->resize(261,null,function ($constraint) { 
       $constraint->aspectRatio(); 
       }) 
       ->save($original_path . $file_name) 
       ->resize(90, 90) 
       ->save($thumbnail_path . $file_name); 

     $user->update(['profile_picture' => $file_name]); 
     return $user; 
    } 
} 
+0

Haben Sie das Formular in der Ansicht ändern, um multipart? –

+0

ja ich habe das .. –

+0

Keine Notwendigkeit, 'Anfrage $ Anfrage 'hinzufügen. Das 'profile_picture' sollte mit' $ data' Container kommen. Verwenden Sie 'dd ($ data)' und sehen Sie den Wert von 'profile_picture' – smartrahat

Antwort

0

Versuchen $ Anfrage an erster Position zu bewegen:

protected function create(Request $request, array $data) 
    { 
    ..... 

PS: funktioniert nicht, wenn der Benutzer erstellt ... oder ist nur test ?, xD

0

eine neue __contruct Methode hinzufügen wie folgt:

protected $request; 

public function __contruct(Request $request) 
{ 
    $this->request = $request; 
} 

Und in Ihrer create-Methode:

protected function create(Request $request, array $data) 
    { 

     $user = User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
      'phone' => $data['phone'], 
      'ssc_year' => $data['ssc'], 
      'hsc_year' => $data['hsc'], 
      'profession' => $data['profession'], 
      'address' => $data['address'], 
     ]); 

     $file = $this->request->file('profile_picture'); 
     $thumbnail_path = public_path('uploads/propic/thumbnail/'); 
     $original_path = public_path('uploads/propic/original/'); 
     $file_name = 'user_'. $user->id .'_'. str_rand(32) . '.' . $file->getClientOriginalExtension(); 
     Image::make($file) 
       ->resize(261,null,function ($constraint) { 
       $constraint->aspectRatio(); 
       }) 
       ->save($original_path . $file_name) 
       ->resize(90, 90) 
       ->save($thumbnail_path . $file_name); 

     $user->update(['profile_picture' => $file_name]); 
     return $user; 
    }