簡體   English   中英

如何將數組傳遞給 laravel 中的特征?

[英]how to pass array to trait in laravel?

我正在嘗試重構我的 controller 我只是創建了 Trait 並在其中放入了一些方法:

我之前的 controller(一種方法):

public function edit(Product $product)
{
    $categories = Category::get();

    $main_image = $product->images()->where('main_image', 1)->first();
    if ($main_image) {
        $image = [];
        $FileUploader = new \FileUploader('other_images',[
            'uploadDir' => public_path('/uploads/product_images/'),
            'title' => 'auto'
        ]);
        $images = $FileUploader->upload();
        foreach ($images['files'] as $img) {
            ProductImage::create([
                'image' => $img['name'],
                'product_id' => $product->id,
                'main_image' => false,
            ]);
        }
    }

    $other_images = $product->images()->where('main_image', 0)->get();
    if ($other_images) {
        $images = [];
        $image[] = [
            "name"  => $main_image->image,
            "type"  => \FileUploader::mime_content_type($main_image->image_path),
            "size"  => filesize('uploads/product_images/' . $main_image['image']),
            "file"  => $main_image->image_path,
            "local" => $main_image->image_path,
            'data' => [
                "id"  => $main_image->id,
            ],
        ];
    }

    return view('merchant.product.update',compact(
        'product',
        'categories',
        'image',
        'images'
    ));
}

創建特征后:

public function edit(Product $product)
{
    $categories = Category::get();

    $main_image = $product->images()->where('main_image', 1)->first();

    if ($main_image) {
        $image = [];
        $this->ShowMainImage($main_image, $image);
    }

    $other_images = $product->images()->where('main_image', 0)->get();

    if ($other_images) {
        $images = [];
        $this->ShowOtherImages($other_images,$images);
    }

    return view('merchant.product.update',compact(
        'product',
        'categories',
        'image',
        'images'
    ));
}

我的特點:

trait ProductTrait{

    public function ShowMainImage($main_image,$image)
    {
        $image[] = [
            "name"  => $main_image->image,
            "type"  => \FileUploader::mime_content_type($main_image->image_path),
            "size"  => filesize('uploads/product_images/' . $main_image['image']),
            "file"  => $main_image->image_path,
            "local" => $main_image->image_path,
            'data' => [
                "id"  => $main_image->id,
            ],
        ];
    }

    public function ShowOtherImages($other_images,$images)
    {
        foreach ($other_images as $image) {
            $images[] = [
                "name"  => $image->image,
                "type"  => \FileUploader::mime_content_type($image->image_path),
                "size"  => filesize('uploads/product_images/' . $image['image']),
                "file"  => $image->image_path,
                "local" => $image->image_path,
                'data' => [
                    "id"  => $image->id,
                ],
            ];
        }
    }

}

之前的第一個正在工作,但第二個沒有! $image$images數組的問題

如何將空數組發送到特征並用數據重新調整數組

您發送imageimages但沒有返回它們,您可以做的是從 Trait 方法返回imageimages而不是發送它們

public function edit(Product $product)
{
   $categories = Category::get();

   $main_image = $product->images()->where('main_image', 1)->first();

   if ($main_image) {
       $image = $this->ShowMainImage($main_image);;
   }

   $other_images = $product->images()->where('main_image', 0)->get();

   if ($other_images) {
      $images = $this->ShowOtherImages($other_images);
  }

  return view('merchant.product.update',compact(
    'product',
    'categories',
    'image',
    'images'
   ));
}

你的特質將是

trait ProductTrait{

public function ShowMainImage($main_image)
{
    return [
        "name"  => $main_image->image,
        "type"  => \FileUploader::mime_content_type($main_image->image_path),
        "size"  => filesize('uploads/product_images/' . $main_image['image']),
        "file"  => $main_image->image_path,
        "local" => $main_image->image_path,
        'data' => [
            "id"  => $main_image->id,
        ],
    ];
}

public function ShowOtherImages($other_images)
{
   $images = [];
    foreach ($other_images as $image) {
        $images[] = [
            "name"  => $image->image,
            "type"  => \FileUploader::mime_content_type($image->image_path),
            "size"  => filesize('uploads/product_images/' . $image['image']),
            "file"  => $image->image_path,
            "local" => $image->image_path,
            'data' => [
                "id"  => $image->id,
            ],
        ];
    }

   return $images;
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM