gpt4 book ai didi

php - 我正在使用 Laravel 5 的命令总线,我不清楚如何实现验证器类

转载 作者:可可西里 更新时间:2023-11-01 12:18:25 25 4
gpt4 key购买 nike

我正在使用 Laravel 5's Command Bus而且我不清楚如何实现验证器类。

我想创建一个 ResizeImageCommandValidator 类,用于在尝试调整图像大小之前检查该图像是否确实是图像。

我想提取的代码来自 ResizeImageCommandHandler 调整大小方法。

if (!($image instanceof Image))
{
throw new ImageInvalidException('ResizeImageCommandHandler');
}

想法来自Laracasts Commands and Domain Events ,但 Jeffrey 不使用 Laravel 5 架构。

这是代码。

ResizeImageCommandHandler.php

<?php namespace App\Handlers\Commands;

use App\Commands\ResizeImageCommand;

use App\Exceptions\ImageInvalidException;
use Illuminate\Queue\InteractsWithQueue;
use Intervention\Image\Image;

class ResizeImageCommandHandler {

/**
* Create the command handler.
*/
public function __construct()
{
}
/**
* Handle the command.
*
* @param ResizeImageCommand $command
* @return void
*/
public function handle($command)
{
$this->resizeImage($command->image, $command->dimension);
}
/**
* Resize the image by width, designed for square image only
* @param Image $image Image to resize
* @param $dimension
* @throws ImageInvalidException
*/
private function resizeImage(&$image, $dimension)
{
if (!($image instanceof Image))
{
throw new ImageInvalidException('ResizeImageCommandHandler');
}
$image->resize($dimension, null, $this->constrainAspectRatio());
}
/**
* @return callable
*/
private function constrainAspectRatio()
{
return function ($constraint) {
$constraint->aspectRatio();
};
}


}

ResizeImageCommand.php

<?php namespace App\Commands;

use App\Commands\Command;

use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldBeQueued;
use Image;

class ResizeImageCommand extends Command {
use InteractsWithQueue, SerializesModels;

public $image;
public $savePath;
public $dimension;

/**
* Create a new command instance.
* @param Image $image
* @param string $savePath
* @param int $dimension
* @param int $pose_id
* @param int $state_id
*/
public function __construct(&$image, $savePath, $dimension)
{
$this->image = $image;
$this->savePath = $savePath;
$this->dimension = $dimension;
}

}

最佳答案

在尝试回答您的问题时,我建议不要过于关注其中的命令 部分。在 Laravel 5.1 中,该文件夹被重命名为“Jobs”——引用;

https://laravel-news.com/2015/04/laravel-5-1/

这恰恰是因为 Taylor 觉得人们对“命令”这个词过于执着了。

另见 http://www.laravelpodcast.com/episodes/6823-episode-21-commands-pipelines-and-packageshttps://laracasts.com/lessons/laravel-5-commands

Illuminate 包中的验证器类非常棒,http://laravel.com/api/5.0/Illuminate/Validation/Validator.html - 我不确定这有什么问题,我猜。

我会说,除非您有令人信服的理由为此使用 Command 类,否则不要这样做。另见:http://www.laravelpodcast.com/episodes/9313-episode-23-new-beginnings-envoyer-laravel-5-1

我谦虚地建议你可能问错了问题,也许你不需要使用命令来处理这个问题。

这可能是您正在寻找的答案:https://mattstauffer.co/blog/laravel-5.0-validateswhenresolved

使用 Illuminate\Contracts\Validation\ValidatesWhenResolved;

如果这不起作用,请注册 Larachat,http://larachat.co/ - 一个专门用于此类事情的 Slack channel 。 Laravel 帮助的最佳场所。 (当然 Stack Overflow 除外)

这是我用来检查图像格式的一个小类,您可能会发现它很有用。

<?php
Class FileUploadFormat
{
public function is_image($image_path)
{
if (!$f = fopen($image_path, 'rb'))
{
return false;
}

$data = fread($f, 8);
fclose($f);

// signature checking
$unpacked = unpack("H12", $data);
if (array_pop($unpacked) == '474946383961' || array_pop($unpacked) == '474946383761') return "gif";
$unpacked = unpack("H4", $data);
if (array_pop($unpacked) == 'ffd8') return "jpg";
$unpacked = unpack("H16", $data);
if (array_pop($unpacked) == '89504e470d0a1a0a') return "png";
return false;
}
}

关于php - 我正在使用 Laravel 5 的命令总线,我不清楚如何实现验证器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com