У меня есть BorrowingCrudController с полем ожидаемой_возвратной даты и полем Final_return_date.
Я хочу создать условие, которое проверит значение поля final_return_date, а затем вызвать метод setTemplatePath для визуализации ожидаемой_возвратной_даты с использованием пользовательского шаблона, если поле final_return_date имеет значение null, или отобразить его нормально, если нет.
Вот мой код:
public function configureFields(string $pageName): iterable
{
yield IntegerField::new('id')->hideOnForm();
yield AssociationField::new('user', 'Utilisateur');
yield AssociationField::new('book', 'Titre du livre');
yield AssociationField::new('book', 'ID du livre')->formatValue(function ($value) {
return $value->getId();
});
yield BooleanField::new('prolongated', 'Prolongé')->renderAsSwitch(false);
yield DateTimeField::new('borrowingDate', 'Date d\'emprunt')
->formatValue(function ($value) {
return $value->format('d-m-Y');
});
yield DateTimeField::new('expectedReturnDate', 'Date de retour prévu')->formatValue(function ($value) {
return $value->format('d-m-Y');
})
->setTemplatePath('admin/field/date_expected_return.html.twig');
yield DateTimeField::new('finalReturnDate', 'Date de retour finale')->formatValue(function ($value) {
if ($value === null) {
return null;
} else {
return $value->format('d-m-Y');
}
});
}
Я попытался создать переменную bool, а затем вызвать метод formatValue, чтобы получить значение поля Final_return_date, а затем соответствующим образом изменить bool для отображения соответствующего шаблона, но это не сработало.






Итак, мне удалось сделать то, что я хотел, вот как: поэтому вместо рендеринга пользовательского шаблона на основе условия в контроллере crud мне пришлось переопределить шаблон index.html.twig в EasyAdmin Bundle. Для этого я зашел в файл index.html.twig, расположенный по адресу
вендор\easycorp\easyadmin-bundle\src\Resources\views\crud\index.html.twig
и в блоке {% table_body %}
Я поместил цикл for, который перебирает поля вentity.fields, в другом блоке следующим образом:
{% block fieldsForLoop %}
{% for field in entity.fields %}
{% set is_searchable = null == ea.crud.searchFields or field.property in ea.crud.searchFields %}
<td data-column = "{{ field.property }}" data-label = "{{ field.label|trans|e('html_attr') }}" class = "{{ is_searchable ? 'searchable' }} {{ field.property == sort_field_name ? 'sorted' }} text-{{ field.textAlign }} {{ field.cssClass }}" dir = "{{ ea.i18n.textDirection }}">
{{ include(field.templatePath, { field: field, entity: entity }, with_context = false) }}
</td>
{% endfor %}
{% endblock %}
Затем, чтобы переопределить базовый шаблон, я создал еще один файл index.html.twig в:
шаблоны\bundles\EasyAdminBundle\crud\index.html.Twig
и добавил в него следующий код:
{% extends '@!EasyAdmin/crud/index.html.twig' %}
{% block fieldsForLoop %}
{% for field in entity.fields %}
{% set is_searchable = null == ea.crud.searchFields or field.property in ea.crud.searchFields %}
{% if (field.property == 'expectedReturnDate' and field.formattedValue|date("Y-m-d") < 'now'|date("Y-m-d") and isReturned == false) %}
<td class = "text-danger" data-column = "{{ field.property }}" data-label = "{{ field.label|trans|e('html_attr') }}" class = "{{ is_searchable ? 'searchable' }} {{ field.property == sort_field_name ? 'sorted' }} text-{{ field.textAlign }} {{ field.cssClass }}" dir = "{{ ea.i18n.textDirection }}">
{{ include(field.templatePath, { field: field, entity: entity }, with_context = false) }}
</td>
{% else %}
<td data-column = "{{ field.property }}" data-label = "{{ field.label|trans|e('html_attr') }}" class = "{{ is_searchable ? 'searchable' }} {{ field.property == sort_field_name ? 'sorted' }} text-{{ field.textAlign }} {{ field.cssClass }}" dir = "{{ ea.i18n.textDirection }}">
{{ include(field.templatePath, { field: field, entity: entity }, with_context = false) }}
</td>
{% endif %}
{% if field.property == 'finalReturnDate' and field.value == null %}
{% set isReturned = false %}
{% else %}
{% set isReturned = true %}
{% endif %}
{% endfor %}
{% endblock %}
и теперь поле ожидаемой даты возвращения становится красным только тогда, когда дата пройдена, а конечная дата возвращения равна нулю, что и было моей первоначальной целью.
Однако мне пришлось немного изменить свой BorrowingCrudController: мне нужно было добавить поле FinalReturnDate перед ожидаемымReturnDate, например, цикл сначала выполняет итерацию по FinalReturnDate и устанавливает переменную isReturned в значение false, если она равна нулю.