我想通過編輯FOSUserBundle中的配置文件添加其他項目。
我試圖通過使用表單集合來解決。FOSUserBundle:我想通過編輯配置文件添加其他項目
實體/ information.php文件
namespace My\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="My\UserBundle\Repository\UserRepository")
*/
class Information
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column @ORM\Column(type="string", length=255, nullable=true)
*/
protected $website;
// .... and other information
/**
* @ORM\OneToOne(targetEntity="User", mappedBy="information", cascade={"persist", "merge"})
*/
protected $user;
// ....
}
實體/ user.php的
// ...
public function __construct()
{
parent::__construct();
$this->information = new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
/**
* @ORM\OneToOne(targetEntity="Information", inversedBy="user")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $information;
/**
* Add information
*
* @param My\UserBundle\Entity\Information $information
* @return User
*/
public function addInformation(Information $information)
{
$this->information[] = $information;
return $this;
}
/**
* Remove information
*
* @param My\UserBundle\Entity\Information $information
*/
public function removeInformation(\My\UserBundle\Entity\Information $information)
{
$this->information->removeElement($information);
}
/**
* Get information
*
* @return Doctrine\Common\Collections\Collection
*/
public function getInformation()
{
return $this->information;
}
控制器/ ProfileController可
public function editAction()
{
$em = $this->container->get('doctrine')->getManager();
$own = $this->container->get('security.context')->getToken()->getUser();
$user = $em->getRepository('MyUserBundle:User')->find_one_with_info($own); //=> Left join information table
if (!is_object($user) || !$user instanceof UserInterface) {
throw new AccessDeniedException('This user does not have access to this section.');
}
if (count($user->getInformation()) == 0)
$user->addInformation(new Information());
$form = $this->container->get('fos_user.profile.form');
$formHandler = $this->container->get('fos_user.profile.form.handler');
$process = $formHandler->process($user);
// ...
窗體/類型/信息類型
// ...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('website', 'text', array('required' => false))
// ... and other information
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'My\UserBundle\Entity\Information',
));
}
// ...
表/類型/ ProfileFormType
// ...
protected function buildUserForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', null, array('label' => 'form.username', 'translation_domain' => 'FOSUserBundle'))
->add('information', 'collection', array(
'type' => new InformationType(),
))
;
}
// ...
查看/資料/ edit_content.html.twig
// ...
{% for info in form.information %}
<div class="_errors">
{{ form_errors(info.website) }}
</div>
<div class="_form_bar">
{{ form_widget(info.website) }}
</div>
// ... and other information
{% endfor %}
<div class="_errors">
{{ form_errors(form.current_password) }}
</div>
<div class="_form_bar">
{{ form_widget(form.current_password) }}
{{ form_label(form.current_password) }}
</div>
{{ form_widget(form) }}
// ...
錯誤我送這個時候發生。
警告:spl_object_hash()預計參數1爲對象,數組 在 給出/path/to/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php 線1375
錯誤點:FOSUserBundle /表格/處理器/ ProfileFormHandler.php
protected function onSuccess(UserInterface $user)
{
$this->userManager->updateUser($user); //=> error point
}
是使用諸如邀請系統的數據傳輸正確的方法?
收集表單可以嗎?
1:用戶實體的信息屬性將數組集合。 2:如果用戶沒有信息,用戶添加新的信息對象。這是通過編輯配置文件添加其他項目的正確方法嗎?有一種奇怪的感覺,就是數組與oneToOne的關係。 (注意:'$ this-> userManager-> updateUser($ user);'警告:spl_object_hash()期望參數1是對象,在oneToOne上給出的數組爲 –
關係使用'實體'表單類型 –
(如果我使用集合表單,會不會有所幫助) –