рд╕рд┐рдореНрдлрдиреА рдореЗрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрдХрд╛рдИ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд░рд┐рд╢реНрд╡рдд рджреЗрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдЯрд░реНрдирдХреА рд╕рдорд╛рдзрд╛рди рдорд╛рдирдХ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕рддреНрдпрд╛рдкрди рдПрдХ рдирд╛рдЬреБрдХ рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЗрд╕ рдмрд╛рд░ рдЖрдкрдХреЛ рдХрд┐рди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреВрд╕рд░реА рдУрд░, рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рдФрд░ рд╕реБрд╡рд┐рдЪрд╛рд░рд┐рдд рдорд╛рдиреНрдпрддрд╛ рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред
рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЬреЛ рдмреБрдирд┐рдпрд╛рджреА рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд░реБрдЪрд┐ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрднреА рднреА рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рд╕реЗ рдмрд╣реБрдд рдХрдо рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдпрд╛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╕рддреНрдпрд╛рдкрди рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдВрджрд░реНрдн рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВрдЧреЗред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдХрд╛рдИ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдбреЗрдЯрд╛ рдЙрдкрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рддреНрдпрд╛рдкрди рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдкрд╣рд▓реВ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдВрддрд░рд┐рдХ рддрд░реНрдХ, рдПрдкреАрдЖрдИ рд╕рддреНрдпрд╛рдкрди, рдЖрджрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо рддреБрд░рдВрдд рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЙрджрд╛рд╣рд░рдг рдПрдХрдорд╛рддреНрд░ рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрддрдо рдЗрд╖реНрдЯрддрдорддрд╛ рдпрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдореБрдХрд╛рдмрд▓рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рдмрд┐рдирд╛ рдХрд╕реНрдЯрдо рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рд░рд▓рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдореВрд▓ рдорд╛рдиреНрдпрддрд╛
рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдмрд╛рдзрд╛ рдФрд░ рдХрд╛рдВрд╕реНрдЯреНрд░реЗрд╡рд┐рд▓реЗрд╡реЗрдЯрд░ рдХреЗ рд╡рд╛рд░рд┐рд╕ред рдмрд╛рдзрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ, рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛, рдЬрдмрдХрд┐ рдХрд╛рдВрд╕реНрдЯреЗрдВрдЯрд╡рд┐рд▓реЗрдбрд┐рдПрдЯрд░ рдЙрдиреНрд╣реЗрдВ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдкрд╛рда рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд "hh: mm" рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗред рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ, рдпрд╣ рд╣реИ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд┐рдпрд╛ рдХрд┐ рдмрд╛рдзрд╛ рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрдиред рддреЛ рдпреЗ рдХрд░рддреЗ рд╣реИред
namespace App\Custom\Constraints;
use Symfony\Component\Validator\Constraint;
class TextTime extends Constraint
{
public $message = ' ';
}
рдпрд╣рд╛рдВ, рд▓рдХреНрд╖реНрдп рдПрдиреЛрдЯреЗрд╢рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╛ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдПред рдЖрдк рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
public function getTargets()
{
return self::PROPERTY_CONSTRAINT;
}
рд╕рдВрджреЗрд╢ рд╕рдВрдкрддреНрддрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рддреНрдпрд╛рдкрди рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
, .
public function validatedBy()
{
return \get_class($this).'Validator';
}
, , ConstraintValidator. ConstraintValidator validate.
namespace App\Custom\Constraints;
use Symfony\Component\Validator\ConstraintValidator;
class TextTimeValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
$time = explode(':', $value);
$hours = (int) $time[0];
$minutes = (int) $time[1];
if ($hours >= 24 || $hours < 0)
$this->fail($constraint);
else if ((int) $time[1] > 60 || $minutes < 0)
$this->fail($constraint);
}
private function fail(Constraint $constraint)
{
$this->context->buildViolation($constraint->message)
->addViolation();
}
}
, , , .
...
private $timeFrom;
...
, , . , , , message .
. , Symfony Time. : . , "hh:mm:ss". , .
, , - . , , : "hh:mm", "hh:mm"-"hh:mm". , , .
, AbstractComparsion. AbstractComparsion Constraint тАФ .
namespace App\Custom\Constraints;
use Symfony\Component\Validator\Constraints\AbstractComparison;
class TextTimeInterval extends AbstractComparison
{
public $message = ' {{ compared_value }}.';
}
namespace App\Custom\Constraints;
use Symfony\Component\Validator\Constraints\AbstractComparisonValidator;
class TextTimeIntervalValidator extends AbstractComparisonValidator
{
protected function compareValues($timeFrom, $timeTo)
{
$compareResult = true;
$from = explode(':', $timeFrom);
$to = explode(':', $timeTo);
try {
if ((int) $from[0] > (int) $to[0])
$compareResult = false;
else if (((int) $from[0] == (int) $to[0]) && ((int) $from[1] > (int) $to[1])) {
$compareResult = false;
}
} catch (\Exception $exception) {
$compareResult = false;
}
return $compareResult;
}
}
рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ (рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ) рд╣рдо рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рддреНрдпрд╛рдкрди рд╕рдлрд▓рддрд╛ рдкрд░ рд╕рд╣реА / рдЧрд▓рдд рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рддреНрдпрд╛рдкрди () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ AbstractComparisonValidator рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рд╣реИ
...
private $timeFrom;
private $timeTo;
...
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЪреВрдВрдХрд┐ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд┐рд╖рдп рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реЗред рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред