Symfony 文本字段 ajax 用户
Symfony textfield ajax users
我有一个消息实体和一个用户实体。我想让用户能够向其他人发送消息。我已经可以发送和接收消息,一切正常,但是为了 select 消息的接收者,创建了一个包含所有用户的默认下拉列表。
我想要做的是将下拉列表更改为文本字段,并向数据库创建一个 AJAX 并检索与文本字段中插入的关键字相匹配的用户列表。单击其中之一时,会在文本字段中介绍用户。
我面临的问题是我不知道如何传递实体而不是纯文本,因为我收到此错误
Argument 1 passed to PrivateMessageBundle\Entity\Message::setReceiver() must be an instance of CrudBundle\Entity\User, string given
另一个问题,是否有捆绑包或插件可以更轻松地完成此操作并且我可以修改?还是每次 ajax 字段我都必须自己做?
我正在像这样构建表单
$builder
->add('title')
->add('content','textarea')
->add('receiver','text');
默认情况下,接收者是一个下拉列表 select 并自动 select 用户实体,但是一旦我将其更改为文本,它就不会了。
这里还有我的实体的相关部分,如果你需要的话:
class Message
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=50)
*/
protected $title;
/**
* @ORM\ManyToOne(targetEntity="CrudBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $receiver;
/**
* @ORM\ManyToOne(targetEntity="CrudBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $sender;
/**
* @var string
*
* @ORM\Column(name="content", type="string", length=2000)
*/
protected $content;
还有我的用户 class,扩展了 FOSUserBundle 的 BaseUser class。
class User extends BaseUser implements AuthorInterface
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
我认为有两种方法可以解决这个问题。
1) 添加一个带有 mapped = FALSE 属性的自定义表单字段。
->add('ajaxsearch', null, array('mapped' => false))
2) 使用 data-transformer.
我有一个消息实体和一个用户实体。我想让用户能够向其他人发送消息。我已经可以发送和接收消息,一切正常,但是为了 select 消息的接收者,创建了一个包含所有用户的默认下拉列表。
我想要做的是将下拉列表更改为文本字段,并向数据库创建一个 AJAX 并检索与文本字段中插入的关键字相匹配的用户列表。单击其中之一时,会在文本字段中介绍用户。
我面临的问题是我不知道如何传递实体而不是纯文本,因为我收到此错误
Argument 1 passed to PrivateMessageBundle\Entity\Message::setReceiver() must be an instance of CrudBundle\Entity\User, string given
另一个问题,是否有捆绑包或插件可以更轻松地完成此操作并且我可以修改?还是每次 ajax 字段我都必须自己做?
我正在像这样构建表单
$builder
->add('title')
->add('content','textarea')
->add('receiver','text');
默认情况下,接收者是一个下拉列表 select 并自动 select 用户实体,但是一旦我将其更改为文本,它就不会了。
这里还有我的实体的相关部分,如果你需要的话:
class Message
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=50)
*/
protected $title;
/**
* @ORM\ManyToOne(targetEntity="CrudBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $receiver;
/**
* @ORM\ManyToOne(targetEntity="CrudBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $sender;
/**
* @var string
*
* @ORM\Column(name="content", type="string", length=2000)
*/
protected $content;
还有我的用户 class,扩展了 FOSUserBundle 的 BaseUser class。
class User extends BaseUser implements AuthorInterface
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
我认为有两种方法可以解决这个问题。
1) 添加一个带有 mapped = FALSE 属性的自定义表单字段。
->add('ajaxsearch', null, array('mapped' => false))
2) 使用 data-transformer.