【问题标题】:Laravel repository store image name does not workLaravel 存储库存储图像名称不起作用
【发布时间】:2017-06-02 18:30:32
【问题描述】:

我正在尝试创建一个用户配置文件并使用 laravel repositories 将其存储到数据库中。 下面是我的控制器代码:

<?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-&gt;image=inputs['image'] 时,它可以工作,但它存储的是我的套接字的路径,而不是图像名称。如何在此处使用getClientOriginalName() 获取客户端图像并将其存储在数据库中?

有什么想法吗?

谢谢

【问题讨论】:

  • 分享你的userRepositorystore方法
  • @Sandeesh 我刚刚编辑了我的代码
  • 您正在处理存储库中的图像文件名。所以没有必要从你的控制器传递值。那么又是什么问题呢?

标签: php laravel laravel-5.3


【解决方案1】:

将您的 store 方法调用更改为此。

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

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

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

要解决此问题,您应该在此处添加一些随机名称生成器。

【讨论】:

  • 谢谢!!!我将商店电话更改为$data=array_mer($request-&gt;all(),['image'=&gt;$name]; $user=$this-&gt;userRepository-&gt;store ($data);,现在可以使用了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2021-05-24
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多