#symfony #doctrine-orm
#symfony #doctrine-orm
Вопрос:
У меня проблема с отображением представления для создания нового объекта, и я не могу найти здесь ответа на существующую проблему, поэтому я собираюсь спросить… В моем приложении есть объект X, который принадлежит одному объекту Y и может иметь много объектов Z.
Когда консоль запускается, она хорошо работает со всеми этими отношениями.
php appconsole doctrine:schema:update --force,
После генерации crud для объекта X страница со списком отображается нормально, но страница для создания новой записи выдает следующее исключение:
Во время рендеринга шаблона возникло исключение («Предупреждение: call_user_func_array () ожидает, что параметр 1 будет допустимым обратным вызовом, класс ‘Symfony Bridge Twig Extension FormExtension’ не имеет метода ‘renderer-> humanize’ в %path_to_app%appcachedevtwig1616033db1d32d7d10db7a0d24db2f49938a4b2e9a63d231d90bf70d1969563fd0.php строка 880») в form_div_layout.html.веточка в строке 232.
В чем может быть проблема?
Обновление 1:
Триггер исключения находится в файле twig, куда передаются данные от контроллера. В {{ form_widget(form) }}
Обновление 2:
// метод контроллера
/**
*
*
* @Route("/new", name="class_new")
* @Template()
*/
public function newAction()
{
$entity = new Class();
$form = $this->createForm(new ClassType(), $entity);
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
//Класс формы
class ClassType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AdminMainBundleEntityClass'
));
}
public function getName()
{
return 'admin_mainbundle_classtype';
}
}
// просмотр
<form action="{{ path('class_create') }}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<p>
<button type="submit">Create</button>
</p>
</form>
Ответ №1:
Попробуйте очистить кеш: php bin/console cache:clear
и повторно запустите свою команду.
Если проблема сохраняется: посмотрите в вашем контроллере, используется ли неопределенная функция для примера renderer->humanize
и посмотрите layout.html.twig at line 232.
Комментарии:
1. Проблема сохраняется, несмотря на очистку кэша, которую я уже выполнял.
2. Этот макет взят из зависимостей. Контроллеры и другие вещи автоматически генерируются php app console doctrine:generate:crud. Я не могу изменить код из каталога поставщика.
Ответ №2:
Я не вижу никаких проблем в вашем контроллере и представлении.
Итак, я попытался найти в form_div_layout.html.twig
файле и обнаружил, что там используется функция humanize, а исключение говорит, что функция не определена.
Итак, вы можете обновить свой проект, : composer install
form_div_layout.html.twig :
{%- block form_label -%}
{% if label is not same as(false) -%}
{% if not compound -%}
{% set label_attr = label_attr|merge({'for': id}) %}
{%- endif -%}
{% if required -%}
{% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %}
{%- endif -%}
{% if label is empty -%}
{%- if label_format is not empty -%}
{% set label = label_format|replace({
'%name%': name,
'%id%': id,
}) %}
{%- else -%}
{% set label = name|humanize %}
{%- endif -%}
{%- endif -%}
<label{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}</label>
{%- endif -%}
{%- endblock form_label -%}
{%- block button_label -%}{%- endblock -%}
Ответ №3:
Я решил это несколько недель назад, но теперь я нашел время для ответа. Это вызывало у меня головную боль перед переносом версии приложения с 2.1 на 2.8. В настоящее время это работает хорошо.