2017-11-22 26 views
1

私はちょうどYii2の学習を始めました。 私はユーザーが外部イメージにURLを入力する必要があるフォームを持っています。 このURLが存在するかどうかを確認できるルール/検証がありますか?標準[['image']、 'image']、[['image']、 'url']は、私がしたいことをしていません。Yii2 URLが有効な画像を指しているかどうか確認してください

答えて

0

だからモデル規則で私はvalidateImageは私が同じモデルに書いたカスタム関数である

[['image'], '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

あなたはこのように独自の検証を追加することができます。しかし、私のマシン上で、これは少し遅いです

['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.'); 
    } 
} ], 

。しかし、試してみてください。

+0

こんにちは、私はすでに解決策を見つけました。私はカスタム関数を作成し、それをルールのフィルタとして配置しました。 – Dmitriy

+0

@Dmitriy Fine。あなた自身の質問に答えてあなたのソリューションを投稿したいかもしれません。他の人にも役立つかもしれないし、面白いかもしれない。それはあまりにも特別でない場合... – robsch

+0

確かに、私は私の仕事のPCから遠慮していた申し訳ありません。 – Dmitriy

0

あなたが規則配列内のモデルでカスタム検証ルールを記述することができますあなたは、コードの下に置くことができます

['image', 'validateimagecheck'], 

することができますベロのようなモデルでvalidateimagecheck fucntion w

関連する問題