symfony2编辑表格&学说问题

时间:2012-06-26 17:26:18

标签: php forms symfony

我是一个Symfony2新手遇到编辑表格和学说的问题。

我似乎以某种方式从我的数据库中获取了一个损坏的对象。

此代码工作正常......

$FormDebug = new Link();
$FormDebug->setUrl('http://www.mysite.com');

$editForm = $this->createFormBuilder($FormDebug)
  ->add('url','url')
  ->add('description','text')
  ->getForm();

虽然这不是......

$repository = $this->getDoctrine()->getRepository('HemekonomiLinksBundle:Link');
$user = $this->container->get('security.context')->getToken()->getUser();       

$userLink = $repository->findBy(
    array('id' => $id, 'user' => $user->getId())
);


$editForm = $this->createFormBuilder($userLink)
  ->add('url','url')
  ->add('description','text')
  ->getForm();

所以我想我得到一个formbuilder不同意的对象..?没有错误消息,只是我没有使用获取对象的实际值填充表单,而是一个空表单。

当我从数据库返回的对象var_dump()时,我可以看到正确的值(以及用户对象的所有属性) - 这是什么导致了我的问题?包含比表单更多变量的对象? )。用户所在的原因当然只是从属于该特定用户的数据库中挑选出那些链接行。

更新: 我在这里添加了两个var_dump(),首先是我希望从DB中检索的对象类型(只是一个描述对象的示例)然后实际检索到的是什么,我可以看到repository-find动作返回一个数组而不是一个物体,但我的物体似乎被包括在内......为什么我不知道...

我的期望

object(Company\LinksBundle\Entity\Link)#556 (4) { ["id":protected]=> NULL ["user":protected]=> NULL ["description":protected]=> NULL ["url":protected]=> string(25) "http://www.mysite.com" }

DB返回什么

array(1) { [0]=> object(Company\LinksBundle\Entity\Link)#553 (4) { ["id":protected]=> int(9) ["user":protected]=> object(Company\UserBundle\Entity\User)#145 (19) { ["id":protected]=> int(3) ["username":protected]=> string(5) "user1" ["usernameCanonical":protected]=> string(5) "user1" ["email":protected]=> string(6) "1@1.se" ["emailCanonical":protected]=> string(6) "1@1.se" ["enabled":protected]=> bool(true) ["salt":protected]=> string(31) "oltkauxmgw000w8wgw84ckggg8sw880" ["password":protected]=> string(88) "AFKlCO774d/4D8DHD3P/sXYYApS32jzdLm5GlZEICnOq8xyKT/xVjbnAziMUadecN0yBlxiH5QZK09s5KJxbsA==" ["plainPassword":protected]=> NULL ["lastLogin":protected]=> object(DateTime)#149 (3) { ["date"]=> string(19) "2012-06-27 07:04:24" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Stockholm" } ["confirmationToken":protected]=> NULL ["passwordRequestedAt":protected]=> NULL ["groups":protected]=> NULL ["locked":protected]=> bool(false) ["expired":protected]=> bool(false) ["expiresAt":protected]=> NULL ["roles":protected]=> array(0) { } ["credentialsExpired":protected]=> bool(false) ["credentialsExpireAt":protected]=> NULL } ["description":protected]=> string(22) "Beskrivning av länken" ["url":protected]=> string(16) "http://testlink.se" } }

这里发生的事情是DB返回实际的链接对象,以及连接到它的用户对象,我的工作是清除我想要的两个中的一个吗?

如果是这样,有没有办法,已经在存储库中 - >发现指定尽管我在我的find语句中的用户字段上的WHERE,我对选择用户对象不感兴趣,我只想要什么在链接表? (symfony2术语中的链接对象,我想......)?

2 个答案:

答案 0 :(得分:1)

  1. 每次使用formbuilder而不是创建表单类是不好的做法(可以说是这样)。
  2. 尝试运行php app/console generate:doctrine:form MyApp:Myentity并使用表单类(设置data_class选项后 - 请参阅“设置data_class”下的the manual
  3. var_dump每个对象(调试链接和从数据库中提取的链接)并发布它们,如果可以的话。

答案 1 :(得分:0)

行,

所以在经过一些试验和错误之后,我发现我的find-method导致了问题。显然,findBy(数组)也返回一个数组,为了得到那个单个对象进行编辑,我必须做find($ id),只有当用户试图编辑他的“自己”时我才会松开SELECTing的功能。 “链接......

我无论如何发现我这样做的方式(通过比较用户名而不是ID)可能不是最好的方法......

如果有人对此发表评论,请随意指出正确的方向,否则我会做一些试错,如果我无法解决,我会发布一个新帖子。