2011-07-14 30 views
5
$this->setValidator('website', new sfValidatorAnd(array(
      $this->validatorSchema['website'], 

      new sfValidatorUrl(array(), array(
      'invalid' => 'This is not website', 
     )),  
))); 

bu http://google.com ancak google.com hayır doğrulamak. Nasıl http olmadan validate için bu düzenleme yapabilir: //?validate url: // symfony içinde

+2

Neden doğru URL'leri girmek için kullanıcıları istemez? Ya da URL bir protokol içermiyorsa, http: // adresine biraz JavaScript ekleyin. Sonra oraya ait olduğunu bile biliyorlardı. – ThiefMaster

+0

ThiefMaster, sen veritabanında url protokolünü hardcode istemiyorum kullanım durumları bol vardır. – Acyra

cevap

4

Ben kendi özel doğrulayıcı oluşturmanız gerekir korkuyorum:

class myCustomValidatorUrl extends sfValidatorRegex 
{ 
    const REGEX_URL_FORMAT = '~^ 
    ((%s)://)?         # protocol 
    (
     ([a-z0-9-]+\.)+[a-z]{2,6}    # a domain name 
     |         # or 
     \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # a IP address 
    ) 
    (:[0-9]+)?        # a port (optional) 
    (/?|/\S+)        # a /, nothing or a/with something 
    $~ix'; 

    protected function configure($options = array(), $messages = array()) 
    { 
    parent::configure($options, $messages); 

    $this->addOption('protocols', array('http', 'https', 'ftp', 'ftps')); 
    $this->setOption('pattern', new sfCallable(array($this, 'generateRegex'))); 
    } 

    public function generateRegex() 
    { 
    return sprintf(self::REGEX_URL_FORMAT, implode('|', $this->getOption('protocols'))); 
    } 
} 
İşte

((%s)://)? artık protokol isteğe bağlıdır anlamına gelir. Özgün desen (REGEX_URL_FORMAT sabit) için sfValidatorUrl bakınız.

+0

Teşekkürler! Ben iyiyim! :) – denys281

-1

sadece yanlış "required" seçeneğini ayarlayın (varsayılan olarak, bu doğrudur). Eğer bayrak FILTER_VALIDATE_URL ile doğal PHP fonksiyonunu filter_var kullanabilirsiniz doğrulayarak için

$this->setValidator('url', 
    new sfValidatorUrl(array('required' => false), array(
    'invalid' => 'invalid url'))); 
+2

Maalesef -1 gerekiyordu. Bu problemden kaçınıyor, çözmüyor. SfValidatorPass(); sonra. – Inoryy