1

フォームフレームワークのエンティティがあります。

    public function editAction($id)
    {
        $request = $this->getRequest();
        $r = $this->getProfileRepository();
        $profile = $id ? $r->find($id) : 
            new \Alden\BonBundle\Entity\Profile();
        /* @var $profile \Alden\BonBundle\Entity\Profile */
        $form = $this->createForm(
            new \Alden\BonBundle\Form\Type\ProfileType(), 
            $profile);
        if ($request->getMethod() == 'POST')
        {
            $form->bindRequest($request);
            if ($form->isValid())
            {
            ...

$profile配列に変換する必要があります。クラスProfileでは、すべてのプロパティがプライベートとして定義されているため、次のように繰り返すことはできません。foreach($profile as $key => $value) {...}

4

1 に答える 1

3

Reflectionを使用して、クラスのプロパティを取得できます。次に、PropertyPathを使用してプロパティ値を取得します。

次に例を示します。

$reflectedClass = new \ReflectionClass($yourClass);
$objectProperties = $reflectedClass->getProperties();
$datas = array();
foreach ($objectProperties as $objectProperty) {
    $property = $objectProperty->getName();

    $path = new PropertyPath($property);
    $datas[] = $path->getValue($object);
}

ただし、フォーム/エンティティが単純な場合は、エンティティに専用のメソッドを作成するだけで、適切な配列を返すことができます。

于 2012-06-01T11:50:00.060 に答える