You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
<?php |
|
|
|
namespace core\forms; |
|
|
|
use core\entities\Slider; |
|
use yii\base\Model; |
|
use Yii; |
|
use yii\validators\ImageValidator; |
|
use yii\web\UploadedFile; |
|
|
|
|
|
class SliderForm extends Model |
|
{ |
|
public ?string $title = null; |
|
public ?string $tagline = null; |
|
public string|UploadedFile|null $image = null; |
|
public ?string $url = null; |
|
public ?int $sort = null; |
|
|
|
public function __construct(Slider $slider = null, $config = []) |
|
{ |
|
if ($slider) { |
|
$this->title = $slider->title; |
|
$this->tagline = $slider->tagline; |
|
$this->url = $slider->url; |
|
$this->sort = $slider->sort; |
|
} |
|
parent::__construct($config); |
|
} |
|
|
|
public function rules(): array |
|
{ |
|
$imageValidator = new ImageValidator(); |
|
$maxSize = $imageValidator->getSizeLimit() < 20*1024*1024 ? $imageValidator->getSizeLimit() : 20*1024*1024; |
|
return [ |
|
[['title', 'image'], 'required', 'on' => Slider::SCENARIO_CREATE], |
|
[['title'], 'required', 'on' => Slider::SCENARIO_UPDATE], |
|
[['sort'], 'integer'], |
|
[['title'], 'string', 'max' => 128], |
|
[['tagline', 'url'], 'string', 'max' => 255], |
|
[['image'], 'image', 'extensions' => 'jpg,png,gif', 'skipOnEmpty' => true, 'maxSize' => $maxSize], |
|
]; |
|
} |
|
|
|
public function attributeLabels() { |
|
return [ |
|
'title' => Yii::t('slider', 'Title'), |
|
'tagline' => Yii::t('slider', 'Tagline'), |
|
'image' => Yii::t('slider', 'Image'), |
|
'url' => Yii::t('slider', 'URL'), |
|
'sort' => Yii::t('slider', 'Sort'), |
|
]; |
|
} |
|
|
|
public function beforeValidate(): bool |
|
{ |
|
if (parent::beforeValidate()) { |
|
$this->image = UploadedFile::getInstance($this, 'image'); |
|
return true; |
|
} |
|
return false; |
|
} |
|
}
|
|
|