我刚刚开始学习Yii2。 我有一个表单,用户必须输入一个URL到外部图像。 是否有一些规则/验证可以检查此URL是否存在? 标准[['图像'],'图像']和[['图像'],' url'],没有做什么我想要。
答案 0 :(得分:2)
您可以像这样添加自己的验证:
['image', function($attribute, $params) {
if (filter_var($this->image, FILTER_VALIDATE_URL) === FALSE) {
$this->addError('image', 'Not an URL.');
return;
}
try {
$headers = get_headers($this->image);
if (!stripos($headers[0], "200 OK"))
$this->addError('image', 'Invalid URL.');
} catch (\Exception $e) {
$this->addError('image', 'Invalid URL.');
}
} ],
然而,在我的机器上这有点慢。但试一试。
答案 1 :(得分:0)
所以在模型规则中我添加了
[['image'], 'validateImage']
其中validateImage是我在同一模型中编写的自定义函数:
// function that checks if path leads to an actual image
public function validateImage($attribute, $params, $validator) {
if (!($something = @getimagesize($this->$attribute))) {
$this->addError($attribute, 'Such an image doen\'t exist');
}
}
答案 2 :(得分:0)
您可以在规则数组中的模型中编写自定义验证规则,您可以将其放在代码
之下['image', 'validateimagecheck'],
你可以validateimagecheck
在模型中加入
public function validateimagecheck($attribute, $params)
{
if (!(file_exists($this->image))) {
$this->addError('image', 'Please enter valid image url');
}
}