我正在尝试找到一个最可重用的工作选项,以便能够从FormType进行翻译.
我的第一个选择是以这种方式专门为每个FormType声明一个服务:
services.yml
form.enquiry:
class: Acme\DemoBundle\Form\EnquiryType
arguments: [@translator]
Run Code Online (Sandbox Code Playgroud)
EnquiryType.php
use Symfony\Component\Translation\Translator;
class EnquiryType extends AbstractType {
public $translator;
public function __construct(Translator $translator=null)
{
$this->translator = $translator;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$tr= $this->translator;
$msg=$tr->trans('default_error');
$builder->add ...
Run Code Online (Sandbox Code Playgroud)
MyController.php
$form = $this->container->get('form.enquiry')->create();
return $this->render('AcmeDemoBundle:Home:index.html.twig', array(
'form' => $form->createView()
));
Run Code Online (Sandbox Code Playgroud)
给出了这个错误
FatalErrorException:错误:调用未定义的方法Acme\DemoBundle\Form\EnquiryType :: create()
我想知道如何通过更改代码来解决它,甚至更好地找到一个更好的选项,允许我将转换器服务注入任何FormType,而无需单独声明每个FormType服务.
虽然我想知道如何解决注入问题,但我最终找到了一个更好的解决方案,只需简单地覆盖 Twig 渲染的表单错误,包括我的自定义 twig 主题上的此块,包括反式过滤器。
{% block form_errors %}
{% spaceless %}
{% if errors|length > 0 %}
{#
<ul>
{% for error in errors %}
<li>{{ error.message }}</li>
{% endfor %}
</ul>#}
{% for error in errors %}
<div class="field_error">{{ error.message |trans}}</div>
{% endfor %}
{% endif %}
{% endspaceless %}
{% endblock form_errors %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4565 次 |
| 最近记录: |