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

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

इस मान्य http://google.com, लेकिन google.com नहीं। मैं इसे http: // के बिना मान्य करने के लिए कैसे संपादित कर सकता हूं?सत्यापित करें कि Url: सिम्फोनी में //

+2

अपने उपयोगकर्ताओं को उचित यूआरएल दर्ज करने के लिए क्यों न पूछें? या अगर जावास्क्रिप्ट में प्रोटोकॉल नहीं है तो http: // को प्रीपेन्ट करने के लिए कुछ जावास्क्रिप्ट जोड़ें। तब वे यह भी जान लेंगे कि यह वहां है। – ThiefMaster

+0

ThiefMaster, वहां बहुत सारे उपयोग मामले हैं जहां आप डेटाबेस में यूआरएल प्रोटोकॉल को हार्डकोड नहीं करना चाहते हैं। – Acyra

उत्तर

4

मुझे डर है कि आप अपने स्वयं के कस्टम सत्यापनकर्ता बनाने की आवश्यकता होगी हूँ:

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'))); 
    } 
} 

यहाँ ((%s)://)? का मतलब है कि अब प्रोटोकॉल वैकल्पिक है। एक मूल पैटर्न (REGEX_URL_FORMAT const) के लिए sfValidatorUrl देखें।

+0

धन्यवाद! मैं शांत हूँ! :) – denys281

-1

बस "आवश्यक" विकल्प को गलत पर सेट करें (डिफ़ॉल्ट रूप से, यह सच है)।

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

क्षमा करें, लेकिन -1 होना था। यह समस्या से बच रहा है, इसे हल नहीं कर रहा है। SfValidatorPass() का भी उपयोग कर सकते हैं; फिर। – Inoryy

1

आप झंडा FILTER_VALIDATE_URL साथ देशी पीएचपी समारोह filter_var इस्तेमाल कर सकते हैं मान्य लिए।

संबंधित मुद्दे