24
我想什麼能夠從任何控制器做的是:創建一個表單作爲Symfony2的服務
$register = $this->get('register_manager');
return $this->render(
'AcmeUserBundle:Account:register.html.twig',
array(
'form' => $register->getRegistrationForm(),
)
);
而且在我的模板
<form>
{{ form_widget(form) }}
</form>
這裏是我如何設定創辦至今
在我Acme/UserBundle/Resources/config/services.yml
我有
parameters:
register_manager.class: Acme\UserBundle\Manager\RegisterManager
services:
register_manager:
class: %register_manager.class%
arguments: [@form.factory]
在RegisterManager.php
我
namespace Acme\UserBundle\Manager;
use Acme\UserBundle\Form\Type\RegistrationType;
use Symfony\Component\Form\FormFactoryInterface;
class RegisterManager
{
protected $formFactory;
public function __construct(FormFactoryInterface $formFactory)
{
$this->formFactory = $formFactory;
}
public function getRegistrationForm()
{
return $this->formFactory->createBuilder(new RegistrationType());
}
}
而在Acme\UserBundle\Form\Type\RegistrationType
我:
namespace Acme\UserBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('username','text');
$builder->add('email','email');
$builder->add('password','password');
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Acme\UserBundle\Entity\User',
);
}
public function getName()
{
return 'registration';
}
}
我知道RegistrationType()
作品我已經在控制器中有它。我的問題是將RegisterManager
設置爲服務,我無法在那裏找到合適的組件,但我不確定在哪裏尋找。
你到底遇到了什麼問題? 「你無法得到正確的組件」是什麼意思?現在它應該按預期工作。 – gilden
現在,在我的RegistrationManager服務中,我需要能夠調用'''createForm(new RegistrationType())'''並返回控制器能夠將它傳遞給模板,但我不確定在哪裏定義''''createForm()'''並且如何使它在這個服務類中可用。在Symfony Forms文檔中,它的訪問方式類似於''this-> createForm()'''但我如何在服務類中做到這一點?我不認爲它是'''FormFactoryInterface''的一部分http://symfony.com/doc/current/book/forms.html#creating-form-classes – ed209
FOSUserBundle直接使用form.factory服務,沒有需要一個RegisterManager類,檢查出來,https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/config/profile.xml – solarc