2017-06-02 2 views
0

Ich versuche, ein Benutzerprofil zu erstellen und speichern Sie es in der Datenbank mit Laravel-Repositories. unten ist mein Controller-Code:Laravel Repository-Speicher Image-Name funktioniert nicht

<?php 

namespace App\Http\Controllers; 

use App\Http\Requests\UsercreateRequest; 
use App\Http\Requests\UserupdateRequest; 
use App\Repositories\UserRepository; 
use Illuminate\Http\Request; 

class UserController extends Controller 
{ 

    protected $userRepository; 
    protected $nbrPerPage=4; 


    public function __construct(UserRepository $UserRepository) 
    { 
     $this->userRepository=$UserRepository; 
    } 

    public function index() 
    { 
     return view('signup'); 
     // 
    } 


    public function create() 
    { 
     return view('signup'); 
     // 
    } 

    public function store(UsercreateRequest $request) 
    { 

     $image =$request->file('image'); 
     if($request->hasFile('image')) 
     { 
      if($image->isValid()) 
      { 

       $way=public_path('images'); 

       $extension=$image->getClientOriginalExtension(); 

       do 
       { 
        $name=$image->getClientOriginalName(); 
        //echo $name; 
       }while(file_exists($way.'/'.$name)); 

       if($image->move($way,$name)) 
       { 

        echo'ok '; //75485205 
        //echo $name; 
        $user=$this->userRepository->store($request->all(), $request); 
        return redirect('dashboard')->withOk(" L'enrisgrement n'a pas abouti !"); 
       } 

      } 

     } 
     return redirect('signup')->withOk(" L'enrisgrement n'a pas abouti !"); 
     // 
    } 

    public function show($id) 
    { 
     $user=$this->userRepository->getByid($id); 

     return view('dashboard', compact('user')); 
     // 
    } 

    public function edit($id) 
    { 
     $user=$this->userRepository->getByid($id); 

     return view('dashboard', compact('user')); 
     // 
    } 

    public function update(UserupdateRequest $request, $id) 
    { 
     $this->userRepository->update($id, $request->all()); 

     return view('dashboard'); 
     // 
    } 

    public function destroy($id) 
    { 
     $this->userRepository->destroy($id); 
     return back(); 
     // 
    } 
} 

Das Modell ist auch, wie unten

<?php 

namespace App; 

use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'email', 'password','image', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 
} 

Mein Repository

<?php 

namespace App\Repositories; 

use App\User; 
use App\Http\Requests\UsercreateRequest; 

class UserRepository{ 


    protected $user; 

    public function __construc(User $user) 
    { 
     $this ->user=$user; 
    } 
    private function save (User $user, Array $inputs, UsercreateRequest $request) 
    { 


     $user->name=$inputs['name']; 
     $user->email=$inputs['email']; 
     $image=$request->file('image'); 
     $name=$image->getClientOriginalName(); 
     $user->image=$name; 
     $user->save(); 
    } 
    public function store(Array $inputs,UsercreateRequest $request) 
    { 
     $user= new User(); 

     $user->password=bcrypt($inputs['password']); 
     $this->save($user,$inputs,$request); 
    } 
    public function getByid ($id) 
    { 
     return $this->user->findOrfail($id); 
    } 
    public function update($id, Array $inputs) 
    { 
     $this->save($this->getByid($id),$inputs); 
    } 

    public function destroy ($id) 
    { 
     $this->getByid($id)->delete(); 
    } 
} 

In meiner Funktion speichern, wenn ich einfach $user->image=inputs['image'] schreiben es funktioniert, aber statt Der Image-Name speichert einen Pfad zu meinem Socket. Wie kann ich hier getClientOriginalName() verwenden, um das Client-Image zu erhalten und in der Datenbank zu speichern?

eine Idee?

Danke

+0

Teilen Sie Ihre 'userRepository'' Store' Methode – Sandeesh

+0

@Sandeesh Ich habe gerade meinen Code bearbeitet –

+0

Sie behandeln den Image-Dateinamen in Ihrem Repository. Es ist also nicht notwendig, den Wert von Ihrem Controller zu übergeben. Also, was ist das Problem wieder? – Sandeesh

Antwort

0

Ändern Sie Ihren Speichermethodenaufruf zu diesem.

$data = array_merge($request->all(), ['image' => $name]); 
$user = $this->userRepository->store($data, $request); 

PS: Die Schleife überprüft, ob die Datei bereits existiert, ist nutzlos. Die Schleife wird niemals enden, wenn bereits ein Bild mit demselben Namen wie die hochgeladene Datei existiert.

do { 
    $name = $image->getClientOriginalName(); 
} while(file_exists($way.'/'.$name)); 

Um dies zu beheben, sollten Sie hier einige zufällige Namen Generator werfen.

+0

Danke !!! Ich habe den Geschäftsaufruf in '$ data = array_mer ($ request-> all(), ['image' => $ name]; $ user = $ this-> userRepository-> store ($ data);' geändert und es funktioniert jetzt –