2014-12-31 1 views
2

라는 제품을 통해 컨트롤러에 사용자 정의 클래스의 개체를 전달하는 방법 : 컨트롤러의 동작에서심포니 2 : 다음과 같습니다 엔티티 클래스가 Ι AJAX

/** 
* @ORM\Entity 
* @ORM\Table(name="product") 
*/ 
class Product 
{ 
/** 
* @ORM\Column(type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @ORM\Column(type="string", length=100) 
*/ 
protected $name; 
} 

, 내가 검색 모든 위해 내 데이터베이스 제품은 나뭇 가지 템플릿에 해당 속성의 일부를 인쇄하려면 :

$products = $repository->findAll(); 
return $this->render('abcNikBundle:Prod:products.html.twig', array('products' => $products)); 

내 문제는 내가 다시 다른 행동 (클래스 제품의) 객체의 배열을 전달하고 몇 가지 물건을하고 싶은 것입니다, 단추를 클릭하면 AJAX 호출을 통해 내 나뭇 가지 템플릿 json_encode() 사용하려고 json_decode() 내 PHP 작업 있지만 작동하지 않았다. 내 나뭇 가지 템플릿에서 나는 다음과 같이로 json_encode 사용

var products = {{ products|json_encode() }}; 

내 AJAX 기능은 다음과 같습니다 :

$.post(Routing.generate('ajaxRoute', { prods: products }), function(data) { 
    $('#ajax_result').html(data); 
}); 

마지막으로 내 컨트롤러에서 :

public function ajaxAction(Request $request) { 
    $myArray = $request->get('prods'); 
    $myArray2 = json_decode($myArray); 
    return new Response(var_dump($myArray2)); 
} 

통과하는 명확한 방법이 있나요 AJAX 호출을 통해 (사용자 정의 클래스의) 객체 또는 객체 배열을 만들 수 있습니까? 어떻게 할 수 있습니까?

+0

IDK 도움이된다면,하지만'var에 제품 = "시도 {{제품 |로 json_encode() }} ";'직렬화되지 않은 데이터가'$. post '에 전달되어야하기 때문에 – Ziumin

+0

자바 스크립트에서 제품 세부 사항을 변경하지 않는다면 전체 제품 문자열을 액션 호출로 전달할 때 어떤 이점이 있습니까? 이드를 방금 통과 한 다음 AJAX 액션에서 다시 찾으면 훨씬 더 작은 요청을 할 수 있을까요? – qooplmao

+0

Qoop : 솔루션은 이미 내 대안 중 하나 였지만 전체 배열을 한꺼번에 가져올 수 있다면 내게 훨씬 쉽습니다. Ziumin : 아마도 당신 말이 맞을 것입니다. 나는 너의 제안을 너무 어쨌든 시도했지만 그건 내 진짜 문제가 아니었다. 감사! – iiirxs

답변

0

JMSSerializerBundle을 사용하는 것이 좋습니다. 변환해야하는 모든 필드를 설정할 수 있습니다.

var products = {{ products|serialize('json') }}; 

을 그리고 컨트롤러에 역 직렬화 : 그럼 당신은 단지 JS에 전달하여 객체를 직렬화 할 수

public function ajaxAction(Request $request) { 
    $serializer = $container->get('jms_serializer'); 
    $myArray = $request->get('prods'); 
    $myArray2 = $serializer->deserialize($myArray, 'Acme\YourBundle\Entity\Product', 'json'); 
    return new Response(var_dump($myArray2)); 
} 
+0

[Symfony의 JsonResponse] (http://symfony.com/doc/current/components/http_foundation/introduction.html#creating-a-json-response) –

+1

나는 질문에서'return' 문을 사용했습니다. 나는 그가 원하는 것을 더 잘 알고 있다고 생각한다 ;-) –

+1

저자가 그것을 사용하기를 원할 경우에 대비하여 간단히 메모를 추가한다. –