2016-01-25 4 views
2

Я хочу заставить пользователя загружать квадратные изображения. Я имею в виду, что ширина и высота квадрата равны. В основных валидаторах в yii2 мы имеем image типа с этим определением:квадратное изображение в yii2

['primaryImage', 'image', 'extensions' => 'png, jpg', 
     'minWidth' => 100, 'maxWidth' => 1000, 
     'minHeight' => 100, 'maxHeight' => 1000, 
], 

теперь, если я хочу использовать пользовательский валидатор, который поддерживает клиентский валидатор, что я должен делать. Пожалуйста, я хочу ограничить пользователя загрузкой моей принудительной ширины и высоты, просто хочу, чтобы это изображение было квадратным.

ответ

2

Вы можете продлить ImageValidator:

class ImageSquareValidator extends ImageValidator 
{ 
    /** 
    * @inheritdoc 
    */ 
    protected function validateImage($image) 
    { 
     if (false === ($imageInfo = getimagesize($image->tempName))) { 
      return [$this->notImage, ['file' => $image->name]]; 
     } 

     list($width, $height) = $imageInfo; 

     if ($width !== $height) { 
      return [Yii::t('yii', 'The image "{file}" is not square.'), ['file' => $image->name]]; 
     } 

     return parent::validateImage($image); 
    } 
} 

В проверке клиента вы можете использовать this пример.

+1

Благодарим за отзыв, но файл api работает только в некоторых браузерах. Есть ли другой способ, кроме файла api? –

+1

@BehzadHassani Самый верный способ - загрузить файл ajax на сервер и проверить на стороне сервера. –

+1

Да, ты прав. –