[英]Laravel repository store image name does not work
我正在嘗試創建一個用戶配置文件,並使用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()
來獲取客戶端圖像並將其存儲在數據庫中?
任何想法 ?
謝謝
將您的存儲方法調用更改為此。
$data = array_merge($request->all(), ['image' => $name]);
$user = $this->userRepository->store($data, $request);
PS:循環檢查文件是否已經存在是沒有用的。 如果已經存在與上傳文件同名的圖像,則循環永遠不會結束。
do {
$name = $image->getClientOriginalName();
} while(file_exists($way.'/'.$name));
要解決此問題,您應該在此處添加一些隨機名稱生成器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.