Я получаю ошибку недействительного аргумента 2, и я пытаюсь загрузить несколько изображений через dropzone.
[ERROR] FatalThrowableError в строке AddPhotoToProduct.php 30: Ошибка типа: аргумент 2 передан в App \ AddPhotoToProduct :: __ construct () должен быть> экземпляром App \ Uploaded, заданным массивом, вызываемым в> C: \ xampp \ htdocs \ mid_login1 \ app \ Http \ Controllers \ ProductPhotoController.php on> строка 37
- Почему абсолютные константы пути __DIR__ и __FILE__ не должны использоваться в Symfony
- Функция substring_index в доктрине ORM
- Учение. Почему я получаю persistentCollection и пустой массив на ManyToMany?
- Как использовать мои сущности и сущности в команде Symfony 2 Console?
- Как визуализировать объект DateTime в шаблоне Twig
ProductPhotoController.php
namespace App\Http\Controllers; use App\Product; use App\ProductPhoto; use App\AddPhotoToProduct; use Illuminate\Http\Request; Use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Input; class ProductPhotoController extends Controller { /** * @param $id * */ public function store($id,Request $request) { $product = Product::LocatedAt($id); $file = $request->file('file'); (new AddPhotoToProduct($product,$file))->save(); } }
И моя модель AddPhotoToProduct.php
namespace App; use Symfony\Component\HttpFoundation\File\UploadedFile; class AddPhotoToProduct { /** * @var Product */ protected $product; /** * The UploadedFile Instance. * * @var UploadedFile */ protected $file; /** * Create a new AddPhotoToProduct form object. * * @param Product $product * @param UploadedFile $file * @param Thumbnail|null $thumbnail */ public function __construct(Product $product, Uploaded $file, Thumbnail $thumbnail = null) { $this->product = $product; $this->file =getName($file); $this->thumbnail = $thumbnail ?: new Thumbnail; } /** * Process the form. */ public function save() { // Attach the photo to the product. $photo = $this->product->addPhoto($this->makePhoto()); // move a file to the base directory with the file name. $this->file->move($photo->baseDir(), $photo->name); // Generate a photo thumbnail. $this->thumbnail->make($photo->path, $photo->thumbnail_path); } /** * Make a new Photo Instance. * * @return ProductPhoto */ protected function makePhoto() { return new ProductPhoto(['name' => $this->makeFilename()]); } /** * Make a Filename, based on the uploaded file. * * @return string */ protected function makeFilename() { // Get the file name original name // and encrypt it with sha1 $name = sha1 ( time() . $this->file->getClientOriginalName() ); // Get the extension of the photo. $extension = $this->file->getClientOriginalExtension(); // Then set name = merge those together. return "{$name}.{$extension}"; } }
Форма-uploads.blade.php
<div class="row"> <div class="col-md-12 portlets"> <!-- Your awesome content goes here --> <div class="mb-30"> <form method="post" action="/admin/products/{{ $products->id }}/photo" class="dropzone" id="addProductImages"> {{ csrf_field()}} </form> </div> </div> </div>
Маршруты Код файла
Route::post('/admin/products/{id}/photo','ProductPhotoController@store');
$ request-> file – это экземпляр FileBag, а не экземпляр App / Uploaded, вы должны взглянуть на Symfony Doc о компоненте HttpFoundation, чтобы лучше понять, как он работает.
class ProductPhotoController extends Controller { /** * @param $id * */ public function store($id,Request $request) { $product = Product::LocatedAt($id); $files = $request->file('file'); foreach ($files as $file) { (new AddPhotoToProduct($product,$file))->save(); } } }