проверьте URL-адрес без http://в symfony
$this->setValidator('website', new sfValidatorAnd(array(
$this->validatorSchema['website'],
new sfValidatorUrl(array(), array(
'invalid' => 'This is not website',
)),
)));
Это подтверждает http://google.com , но google.com нет. Как я могу это отредактировать для проверки без http:// ?
5
Author: Break Break, 2011-07-14
3 answers
Боюсь, вам придется создать свой собственный валидатор:
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)://)?
означает, что теперь протокол необязателен.
Смотрите sfvalidatorurl для исходного шаблона (REGEX_URL_FORMAT const).
4
Author: melekes, 2011-07-14 09:08:52
Для проверки вы можете использовать собственную функцию PHP filter_var с флагом FILTER_VALIDATE_URL.
1
Author: Raffael, 2011-07-14 08:58:44
Просто установите для параметра "обязательно" значение false (по умолчанию оно равно true).
$this->setValidator('url',
new sfValidatorUrl(array('required' => false), array(
'invalid' => 'invalid url')));
-1
Author: Rush, 2011-07-14 08:51:57