Выдает ошибку внутри сущности Symfony2, если значение не соответствует оператору if

1

У меня есть следующий код внутри моего Clutch.php entity.

/**
 * Set incubationTemp
 *
 * @param integer $incubationTemp
 * @return Clutch
 */
public function setIncubationTemp($incubationTemp)
{
    $this->incubationTemp = $incubationTemp;

    if($incubationTemp > 77.5 && $incubationTemp < 82.5){
        $estimatedHatchStart = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+60days');
        $estimatedHatchEnd = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+70days');
    } 
    else if($incubationTemp > 82.5 && $incubationTemp < 88.5) {
        $estimatedHatchStart = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+45days');
        $estimatedHatchEnd = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+55days');
    }
    else if($incubationTemp > 88.5 && $incubationTemp < 92.5) {
        $estimatedHatchStart = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+35days');
        $estimatedHatchEnd = new \DateTime($this->getLaidDate()->format('Y-m-d') . '+45days');
    } else {
        // Throw an error here
    }

    $this->setEstimatedHatchStart($estimatedHatchStart);
    $this->setEstimatedHatchEnd($estimatedHatchEnd);

    return $this;
}

Это отлично работает, если переданное значение находится между значениями, которые вы можете видеть в инструкции if. То, что я хотел бы сделать, это заставить ошибку показать, что значение $incubationTemp находится за пределами проверяемых значений. Каков наилучший способ достичь этого?

РЕДАКТИРОВАТЬ:

По Петру ответ. Это отлично работает:

use Symfony\Component\Validator\Constraints as Assert;

// ...

/**
 * @var integer
 *
 * @ORM\Column(name="incubation_temp", type="integer")
 * @Assert\Range(
 *      min = 78,
 *      max = 92,
 *      minMessage = "The fahrenheit value you have entered is not a suggested value for incubating leopard geckos. Please make sure the value is at least {{ limit }}°f.",
 *      maxMessage = "The fahrenheit value you have entered is not a suggested value for incubating leopard geckos. Please make sure the value is lower than {{ limit }}°f."
 * )
 */
private $incubationTemp;
Теги:

1 ответ

1
Лучший ответ

Вероятно, не будет "лучшего" способа, но возможны исключения:

class InvalidIncubationTemperatureException extends \DomainException {}

А потом

else {
    throw new InvalidIncubationTemperatureException(
        'Whatever message you want'
    )
}

Когда вы говорите "показать" ошибку, которая может означать много вещей, но предположим, что вы находитесь в контексте контроллера

try {
    $clutch = new Clutch();
    $clutch->setIncubationTemp(0);
}
catch (InvalidIncubationTemperatureException $e)
{
    $this->addFlash('clutch_errors', $e->getMessage())
}

Тогда в твоей веточке

{% set errors = app.session.flashbag.get('clutch_errors') %}
{% if errors|length %}
  {% for message in errors %}
    {{ message}}
  {% endfor %}
{% endif %}

Или какой бы механизм вы ни пожелали.

Однако лучший способ справиться с этим может заключаться в проверке

  • 0
    Спасибо, Питер. Должен ли class InvalidIncubationTemperatureException extends \DomainException {} входить в мою сущность?
  • 0
    На самом деле, я думаю, я прочитаю о проверке. Еще раз спасибо :)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню