Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function guard($value, Field $field)
 {
     parent::guard($value, $field);
     if ($pattern = $field->getPattern()) {
         Assertion::regex($value, $pattern, null, $field->getName());
     }
     switch ($field->getFormat()->getValue()) {
         case Format::UNKNOWN:
             break;
         case Format::DATE:
             Assertion::regex($value, '/^\\d{4}-\\d{2}-\\d{2}$/', null, $field->getName());
             break;
         case Format::DATE_TIME:
             Assertion::true(DateUtils::isValidISO8601Date($value), sprintf('Field [%s] must be a valid ISO8601 date-time.  Format must match one of [%s], [%s] or [%s].', $field->getName(), DateUtils::ISO8601_ZULU, DateUtils::ISO8601, \DateTime::ISO8601), $field->getName());
             break;
         case Format::SLUG:
             Assertion::regex($value, '/^([\\w\\/-]|[\\w-][\\w\\/-]*[\\w-])$/', null, $field->getName());
             break;
         case Format::EMAIL:
             Assertion::email($value, null, $field->getName());
             break;
         case Format::HASHTAG:
             Assertion::true(HashtagUtils::isValid($value), sprintf('Field [%s] must be a valid hashtag.  @see HashtagUtils::isValid', $field->getName()), $field->getName());
             break;
         case Format::IPV4:
         case Format::IPV6:
             /*
              * todo: need separate assertion for ipv4 and ipv6
              */
             Assertion::url('http://' . $value, sprintf('Field [%s] must be a valid [%s].', $field->getName(), $field->getFormat()->getValue()), $field->getName());
             break;
         case Format::HOSTNAME:
         case Format::URI:
         case Format::URL:
             /*
              * fixme: need better handling for HOSTNAME, URI and URL... assertion library just has one "url" handling
              * but we really need separate ones for each of these formats.  right now we're just prefixing
              * the value with a http so it looks like a url.  this won't work for thinks like mailto:
              * urn:, etc.
              */
             if (false === strpos($value, 'http')) {
                 $value = 'http://' . $value;
             }
             Assertion::url($value, sprintf('Field [%s] must be a valid [%s].', $field->getName(), $field->getFormat()->getValue()), $field->getName());
             break;
         case Format::UUID:
             Assertion::uuid($value, null, $field->getName());
             break;
         default:
             break;
     }
 }