2017-02-26 56 views
0

他们多幅图像我试图通过在控制器这样做是为了uplaod在数据库中的多个图像:upoad在数据库和表示Laravel

公共函数存储(请求$请求) {

 $pictures=[]; 
    $input=$request->all(); 
    if($file=$request->file('images')) $pictures[]=$request->file('images'); 
    if($file=$request->file('image1')) $pictures[]=$request->file('image1'); 
    if($file=$request->file('image2')) $pictures[]=$request->file('image2'); 
    if($file=$request->file('image3')) $pictures[]=$request->file('image3'); 
    if($file=$request->file('image4')) $pictures[]=$request->file('image4'); 
    if($file=$request->file('image5')) $pictures[]=$request->file('image5'); 
    if($file=$request->file('image6')) $pictures[]=$request->file('image6'); 

    foreach($pictures as $file) 


    for($name=0;$name<=7;$name++) 
    { 
     $name=$file->getClientOriginalName(); 
    } 
     $file->move('image',$name); 

     $input['images']=$name; 
     $input['image1']=$name; 
     $input['image2']=$name; 
     $input['image3']=$name; 
     $input['image4']=$name; 
     $input['image5']=$name; 
     $input['image6']=$name; 




    Detail::create($input); 

    return redirect('/'); 


} 

它从窗体中获取图像并将所选图像存储在公共/图像文件夹中,但在数据库中存储具有相同图像名称的所有图像。在显示的同时,它也会多次显示相同的图像。

我知道这里的人有解决这个问题,可能有更好的主意。所以请在这里帮助我。提前致谢。

上面做的方法是不适合我,所以我在我的控制器这样做

 public function uploadSubmit(request $request) 
{ 
    // Coming soon... 
    $data=$request->all(); 
    $imagename =[]; 
    $i = 0; 
    $files =Input::file('images'); 
    foreach($files as $file){ 
     $extension = $file->getClientOriginalExtension(); 
     $imagename[$i] = 'post'.str_random(10).'.jpg'; 
     $destinationPath = 'assets/posts'; 
     $file->move($destinationPath, $imagename[$i]); 
     $i++; 
    } 
    Detail::create($files); 
     return redirect('/'); 
    } 

而且在路线:

Route::resource('/details','DetailController'); 

现在我得到这样的错误:FatalThrowableError在DetailController .php第43行: 调用数组上的成员函数getClientOriginalName()。 任何人都可以在这里指出问题。谢谢。

+0

Laravel的哪个版本是为你做的?将有助于提供适当的请求示例。您将使用相同的名称将所有图像作为数组发送到PHP。您是通过标准表单还是JavaScript发布到PHP? –

+0

我正在使用laravel 5.4.12。 –

回答

1

所以我会设置一个自定义的请求来验证上传图像,然后你可以直接在你的控制器上传它们,如下面的例子所示。

应用程序\ HTTP \请

<?php 

namespace App\Http\Requests; 

use Illuminate\Foundation\Http\FormRequest; 

class ImageRequest extends FormRequest 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 

     // Logic to authorize the request 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     $rules = [ 
      // Any other required laravel validations 
     ]; 

     if (is_array($this->request->get('images'))): 
      foreach ($this->request->get('images') as $key => $val): 
       if($key == 0) continue; 
       $rules['images.' . $key] = 'required|image'; 
      endforeach; 
     endif; 
     return $rules; 
    } 
} 

应用程序\ HTTP \控制器\ ImageController

<?php 
namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests\ImageRequest; 

class ImageController extends Controller 
{ 
    public function store(ImageRequest $request) { 
     $uploadedImagesPath = array(); 
     foreach($request->input("images") as $key => $image): 
      $thisFile = $request->file("images")[$key]; 
      if($thisFile->isValid()): 

       // Get original file name 
       $imageName = $thisFile->getClientOriginalName();     

       // Upload file to default Laravel configured upload location 
       $uploadedImagesPath[$key] = $thisFile->storeAs('images', $imageName); 
       // Function was in your example code 
       // Detail::create($request->file("images")); 

      endif; 
     endforeach; 
     return redirect('/'); 
    } 

} 

你可以阅读更多的话题上Laravel的网站

https://laravel.com/docs/5.4/requests#retrieving-uploaded-files

https://laravel.com/docs/5.4/validation#form-request-validation

+0

我按照你的建议做了,但浏览器抛出这样的错误: ReflectionSignance RouteSignatureParameters.php 25行: 类Groomer \ Http \ Request \ ImageRequest不存在 –

+0

更改使用Groomer \ Http \ Requests \ ImageRequest;到 使用app \ Http \ Requests \ ImageRequest;或者你的应用程序被命名的任何类 - 忘记从我抓取的示例项目中改变它。 –

+0

我还对控制器进行了另一项更改,以便StoreAs功能正常工作。 –