Как передать модель в задание / очередь для управления изображением - PullRequest
0 голосов
/ 10 мая 2019

У меня есть PhotoController, который сканирует каталог и создает изображения, создает новую запись в базе данных и отправляет задание для управления изображением, но не может заставить его работать!

Вот фотомодель:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Photo extends Model
{
    protected $table = "photos";

    protected $fillable = [
        'org_path'
    ];
}

Вот фотоконтроллер:

namespace App\Http\Controllers;

use App\Photo;

use App\Jobs\ProcessImage;


class PhotoController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        // Get Photos inside the private folder org_folder
        $org_images = preg_grep('~\.(jpeg|jpg|png)$~', scandir(storage_path('app/images/')));

        foreach ($org_images as $image) {

            $post = new Photo;
            $post->org_path = storage_path('app/images/').$image;
            $post->pub_path = NULL;
            $post->save();

            $this->dispatch(new ProcessImage($post));

        }

    }

}

Здесь Работа:

namespace App\Jobs;

use Illuminate\Bus\Queueable;  
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

use Image;
use App\Photo;

class ProcessImage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable,     SerializesModels;

    protected $post;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Photo $post)
    {   
        $this->post = $post;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {   
        $resized_image_path = storage_path('app/public/').rand(5, 100).'.jpg';
        $image = Image::make($post->org_path);
        $image->resize(200,200)->save($resized_image_path);
    }
}

Я не могу каким-то образом получить доступ к изображению с работы. Подскажите, пожалуйста, что мне не хватает?

1 Ответ

0 голосов
/ 10 мая 2019

Вы должны обращаться к объекту post, используя $this->post во 2-й строке метода handle(), а не $post, который вы присвоили в конструкторе.Надеюсь, это решит проблему.

...