2017-06-02 82 views
0

我正在尝试创建用户配置文件并使用laravel存储库将其存储到数据库中。下面 是我的控制器代码:Laravel存储库存储图像名称不起作用

<?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(); 
     // 
    } 
} 

模型也如下

<?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', 
    ]; 
} 

我的仓库

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

在我保存功能时,我只是写$user->image=inputs['image']它的工作原理,但不是图像名称存储一个路径到我的套接字。我如何在这里使用getClientOriginalName()来获取客户端映像并将其存储在数据库中?

有什么想法吗?

谢谢

+0

分享你的'userRepository'' store'方法 – Sandeesh

+0

@Sandeesh我刚刚编辑了我的代码 –

+0

你正在处理仓库中的图像文件名。所以没有必要从你的控制器传递值。那么又有什么问题呢? – Sandeesh

回答

0

更改您的商店方法调用此。

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

PS:检查文件是否已经存在的循环是无用的。如果与上传文件具有相同名称的图像已存在,则循环将永不结束。

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

要解决这个问题,你应该在这里引入一些随机名称生成器。

+0

谢谢!我将商店调用改为了'$ data = array_mer($ request-> all(),['image'=> $ name]; $ user = $ this-> userRepository-> store($ data);'现在 –