2013-04-09 195 views
0

我使用symfony2和createForm來獲取http發佈數據。巫後我做的:PHP和Symfony對象通過類型轉換數組轉換

$Data = (array) $form->getData(); 

我也得到:

array (size=1) 
    '�Far\MT\AccountBundle\Entity\Movement�toAccount' => int 3 

我不認爲這是對這些案件的正常行爲,任何建議嗎?

的toAccount應該是完整的索引名。

無法重現條件的測試用例執行以下命令:

<?php 

namespace A; 

class MyClass 
{ 
    public $id; 
    public $name; 
    public $age; 
} 

$object = new MyClass(); 
$object->name = "Andre"; 
$object->id = 1; 
$object->age = 30; 

var_dump($object); 

$Ar = (array) $object; 
var_dump($Ar) 

這上面的工作確定。

我用這個解決方案:

//comment 
$Data = $form->getData(); 
$obj = new \ReflectionObject($Data); 
$props = $obj->getProperties(); 

$propname = array(); 
foreach ($props as $prop) { 

    $tmp = "get".ucfirst($prop->name); 

    if (($res = $Data->$tmp())!== null) { 
     $propname[$prop->name] = $res; 
    } 
} 
$tmpSearch = $propname; 

我會照顧它清理乾淨。

回答

1

可以使用Symfony的正規化類,如你的建議,當你在與像「facility_id」下劃線表單名稱字段,但您的二傳手被稱爲facilityId

<?php 
$data = $form->getData();  
$normalizers = new \Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer(); 
$norm = $normalizers->normalize($data); 
print_r($norm); 

你會得到像輸出將失敗

Array ([fullname] => fullnameVal [email] => [email protected] [phoneNumber] => 5554444 [facilityId] => 123132)