使用Laravel的存储库,将图像保存到DB

时间:2014-05-27 22:12:59

标签: php laravel-4

我已经设置了一个存储库来创建一个新的居民。

 <?php namespace Crescent\Repos;

   interface ResidentRepository {
        public function create($input);
 }

然后在我的控制器中,我使用干预图像类调整图像大小并将其正确上传到目录,但是如何使用此存储库将文件名保存到数据库?

 public function store()
   {

   if (Input::hasFile('photo')){

     $res = new Residents;

     $file = Input::file('photo');
     $name = $file->getClientOriginalName();

     $input = Input::all();

     $image = Image::make(Input::file('photo')->getRealPath())->resize(200, 200);
     $image->save(public_path() . '/uploads/residents/' . $input['photo']->getClientOriginalName());
     $res->photo = $name; // This doesn't work

    }
    $this->resident->create(Input::all());

    } 

其他一切都可以处理所有数据,但是图像没有存储名称只显示一些临时目录/名称,如/ tmp / phpIX7KcY

1 个答案:

答案 0 :(得分:3)

我看到您已完成$res = new Residents;$res->photo = $name;,但您尚未完成$res->save();,这会将名称保存到与Residents对应的表格中。此外,由于您尚未向$res添加任何其他内容,因此只会保存照片。

使用以下内容替换控制器中的代码:

public function store()
{
    $input = Input::all();

    if (Input::hasFile('photo')){

       $file = Input::file('photo');
       $name = $file->getClientOriginalName();


       $image = Image::make(Input::file('photo')->getRealPath())->resize(200, 200);
       $image->save(public_path() . '/uploads/residents/' . $input['photo']->getClientOriginalName());

       $input['photo'] = $name;
   }

   $this->resident->create($input);

} 

如果您的代码$this->resident->create(Input::all());正确保存除照片之外的所有数据,那是因为通过Input::all()您正在保存与从客户端收到的所有内容以及从调整大小收到的文件名Input::all()中没有操作。通过将Input::all()分配给变量$input并执行$input['photo'] = $name;,可以存储服务器上文件的位置,而不是客户端上的位置。因此,通过执行$this->resident->create($input);,服务器上的位置与从客户端接收的其他数据一起存储。