我正在創建一個Web界面,允許用戶在CentOS 6.x上分配https://github.com/FriendsOfSymfony/FOSUserBundle和Symfony版本2.7。FOSUserBundle - UserType形式的組賦值
這是我的代碼:我讀過的Symfony和Google搜索的文檔
use FOS\UserBundle\Model\GroupManager;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
/**
* @Route("/admin/user")
*/
public function indexAction(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_ADMIN', null, 'Unable to access this page!');
$groups = $this->get('fos_user.group_manager')->findGroups();
$groupNames = [];
foreach ($groups as $g) {
$groupNames[] = $g->getName();
}
$user = new User();
$user_form = $this->createForm(new UserType(), $user);
$user_form->add('groups', ChoiceType::class, [
'choices' => $groupNames,
'choices_as_values' => true,
'multiple' => false
]);
return $this->render('admin/user/index.html.twig', array(
'user_form' => $user_form->createView(),
'base_dir' => realpath($this->container->getParameter('kernel.root_dir') . '/..'),
));
}
,但調試器拋出一個錯誤(未能加載類型「的Symfony \分量\表格\推廣\ Core \ Type \ ChoiceType「)。
我有兩個問題:
我如何添加一個選擇字段成允許用戶選擇哪個組將用戶分配到表單?
將組選擇元素添加到UserType中會更好嗎?
這就是我對用戶類型(從下面的Symfony的文檔):
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username')
->add('email')
->add('enabled', 'checkbox')
->add('locked', 'checkbox')
->add('expired', 'checkbox')
->add('credentialsExpired', 'checkbox')
;
}
謝謝@hendrathings爲提供更好的解決方案比我早。
我升級到Symfony 3.0以避免將來版本問題。
這是我終於實現:
在UserType.php
// Additional dependencies ...
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $data)
{
$builder
->add('username', TextType::class)
->add('email', TextType::class)
->add('enabled', CheckboxType::class)
->add('locked', CheckboxType::class)
->add('groups', ChoiceType::class, [
'choices' => $data['group_names'],
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\User',
'group_names' => []
));
}
public function getName()
{
return 'user';
}
}
它是由控制器稱爲像這樣:
$groups = $this->get('fos_user.group_manager')->findGroups();
$groupNames = [];
foreach($groups as $g)
{
$groupNames[$g->getName()] = $g->getId();
}
$user = new User();
$user_form = $this->createForm(UserType::class, $user, array('group_names' => $groupNames));
這也是有幫助的:Pass custom options to a symfony2 form
我對我的實施並不滿意,但我認爲我現在就離開,繼續前進。
謝謝@hendrathings - 你讓我學到了很多 – user2182349