Я обозначил поле формы даты и времени как read_only. Поскольку эти швы не имеют эффекта, я отклонил шаблон шаблона по умолчанию. Это прекрасно работает.Symfony: Сделать поле формы даты и времени действительно только для чтения
{% block datetime_widget %}
{% if read_only %}
{{ value.date.year }}-{{ value.date.month }}-{{ value.date.day }} {{ value.time.hour }}:{{ value.time.minute }}
{% else %}
{{ parent() }}
{% endif %}
{% endblock %}
Это тип формы я использую:
/**
* @ORM\Entity
*/
abstract class BusinessClass
{
/**
* @ORM\Column(type="datetime")
* @var \DateTime
*/
private $created;
/**
* @return \DateTime
*/
public function getCreated()
{
return $this->created;
}
}
И это, как поле даты и времени добавляется к форме строитель:
$formBuilder->add('created', 'datetime', array('read_only' => true));
Однако Symfony все еще пытается чтобы вернуть неизмененное значение в мой тип формы. Поскольку он доступен только для чтения, я только реализовал метод get, но не установил метод. Вот почему я получаю сообщение об ошибке:
InvalidPropertyException: Neither element "created" nor method "setCreated()" exists in class "Cinergy\ShopBundle\Tests\Functional\TestBundle\Entity\RecurringProduct"
in /Users/ernst/Source/php/cinergy/shop/vendor/symfony/symfony/src/Symfony/Component/Form/Util/PropertyPath.php line 552
at PropertyPath->writeProperty(object(RecurringProduct), 'created', null, false, null) in /Users/ernst/Source/php/cinergy/shop/vendor/symfony/symfony/src/Symfony/Component/Form/Util/PropertyPath.php line 318
at PropertyPath->setValue(object(RecurringProduct), null) in /Users/ernst/Source/php/cinergy/shop/vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/DataMapper/PropertyPathMapper.php line 74
at PropertyPathMapper->mapFormsToData(array('created' => object(Form), 'duration' => object(Form), 'id' => object(Form), 'name' => object(Form), 'price' => object(Form), 'sku' => object(Form), 'updated' => object(Form), '__entity' => object(Form), '__id' => object(Form)), object(RecurringProduct)) in /Users/ernst/Source/php/cinergy/shop/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php line 569
at Form->bind(object(Request)) in /Users/ernst/Source/php/cinergy/shop/src/Cinergy/DaylightBundle/Controller/BrowserController.php line 123
at BrowserController->updateAction(object(Request))
at call_user_func_array(array(object(BrowserController), 'updateAction'), array(object(Request))) in /Users/ernst/Source/php/cinergy/shop/src/Cinergy/CommonBundle/EventListener/TransactionWrapper.php line 34
at TransactionWrapper->wrappedExecution(object(Request))
at call_user_func_array(array(object(TransactionWrapper), 'wrappedExecution'), array(object(Request))) in /Users/ernst/Source/php/cinergy/shop/app/bootstrap.php.cache line 1426
at HttpKernel->handleRaw(object(Request), '1') in /Users/ernst/Source/php/cinergy/shop/app/bootstrap.php.cache line 1390
at HttpKernel->handle(object(Request), '1', true) in /Users/ernst/Source/php/cinergy/shop/app/bootstrap.php.cache line 1566
at HttpKernel->handle(object(Request), '1', true) in /Users/ernst/Source/php/cinergy/shop/app/bootstrap.php.cache line 617
at Kernel->handle(object(Request)) in /Users/ernst/Source/php/cinergy/shop/web/app_dev.php line 28
Поскольку это часть моей бизнес-логики я не хочу, чтобы реализовать метод setCreate. Также упоминается, что одно и то же прекрасно работает для текстовых полей.
Любые идеи о том, как я могу остановить symfony от установки значения, если установлен параметр read_only
?
вы хотите установить «сопоставленный» в false, если его просто для показа. Если я правильно вас пойму. В противном случае, отправьте некоторый код (больше, чем просто фрагмент твига) – Prisoner
Настройка, сопоставленная с false, делает многое, это также вызывает остановку symfony от чтения значения. – BetaRide
Добавлена форма tyoe и обработка конструктора форм. Пожалуйста, не то, что то же самое отлично работает для текстовых полей. – BetaRide