2013-04-10 3 views
2

좋아, 우선 면책 조항. 저는 첫 번째 Sf2 프로젝트를 진행하고 기존 sf1 프로젝트를 진행하면서 Sf2로 리팩토링하여 모든 서랍을 옮겨 놓은 위치를 파악합니다.나뭇 가지와 하위 컨트롤러 사이에 무엇인가 내 물건을 먹고 있습니다.

지금, 이상한 일이 일어나고 있으며, 내 머리카락의 마지막 부분을 찢어 버리고 있습니다.

--- TL; DR : 요약 ---

난 나뭇 템플릿으로부터 제어기를 렌더링하는 서브 제어기를 통해 배열을 전달하고있다. 배열 값 중 하나는 객체이지만 객체가 컨트롤러에 도달하기 전에 사라집니다.

내가 할 수있는 한 Symfony2 흐름을 통해 추적했으며 객체는 추적 할 수있는 범위까지 손상되지 않았습니다. 그런 다음 잃어 버렸지 만, Symfony \ Component \ HttpKernel \ Fragment \ InlineFragmentRenderer :: render()와 내 (하위) 컨트롤러 사이에있는 객체가 사라집니다.

이 기능입니까, 버그입니까, 아니면 저입니까? I 등) imageItem 및 linkedPageItem 같은 연결 요소를 포함 (나뭇 가지 변수 '집합'에 할당) 엔티티 객체를 처리하는 나뭇 템플릿을

구체적

--- --- .

개체가 수화되어 있는지 여부에 관계없이 Array Notation을 사용하여 값에 액세스 할 수 있도록 내 엔터티가 ArrayAccess를 구현하는 기본 클래스를 확장하도록 설정되었습니다. (여기에 설명 된 옵션 # 1 방법론에 따라 : http://docs.doctrine-project.org/en/latest/cookbook/implementing-arrayaccess-for-domain-objects.html).

나뭇 가지에는 이미지 블록을 렌더링하기 위해 일부 개체를 하위 컨트롤러로 전달하는 이와 같은 선이 있습니다. renderImage 하위 컨트롤러는 나뭇 가지 블록을 렌더링하기 전에 모든 항목을 정리합니다.

여기서 메인 나뭇 파일의 코드이다 :

{# blockLinks.html.twig #} 
... 
{{- render(controller(
    'MyBundle:Helper:renderImage', 
    { 
     'image': collection['imageItem'], 
     'options': { 
      'html_options': { 'class': 'foo' }, 
      'link_options': { 'class': 'bar' }, 
      'link_url':  collection['item_link_url'], 
      'link_page': collection['linkedPageItem'] 
     } 
    } 
)) -}} 
... 

그러나, renderImage 서브 제어기 $ 옵션 [ 'link_page']의 값을 수신하지 않는다.

이것은 이상한 일이므로 자세히 살펴 보았습니다. twig이 blockLinks.html.twig를 렌더링 한 PHP 파일을 발견했습니다.

거기에서 우리는 발견 :

// /app/cache/dev/twig/01/30/lotsofnumbers.php 
... 
echo $this->env->getExtension('http_kernel')->renderFragment($this->env->getExtension('http_kernel')->controller(
    "CaponicaFdsWebsiteBundle:Helper:renderImage", 
    array(
     "image" => $this->getAttribute($_collection_, "imageItem", array(), "array"), 
     "options" => array(
      "html_options" => array("class" => "foo"), 
      "link_options" => array("class" => "bar"), 
      "link_url" => $this->getAttribute($_collection_, "item_link_url", array(), "array"), 
      "link_page" => $this->getAttribute($_collection_, "linkedPageItem", array(), "array") 
     ) 
    ) 
)); 
... 

확인, 잘 보인다.

무슨 일이 있었는지 알아 내기 위해 \Doctrine\Common\Util\Debug::dump($this->getAttribute($_collection_, "linkedPageItem", array(), "array"));을 작성했는데 실제로 이것이 Page 객체를 반환한다고보고합니다.

즉> 심포니 \ 브리지 \ 나뭇 가지 \ 확장 \ HttpKernelExtension :: renderFragment()
- -> 심포니 \ 구성 요소 \ HttpKernel 조각 \ 캐시
에서 컴파일 된 나뭇 가지의 PHP 파일에서 시작

object(stdClass)[874] 
    public '__CLASS__' => string 'MyBundle\Entity\Page' 
... 

: 그것은 같은 것을보고 \ FragmentHandler는 :: 렌더링()
이 -> 심포니 \ 구성 요소 \ HttpKernel 조각 \ InlineFragmentRenderer \ : (렌더링) 개체가 그대로입니다이 시점 (덤핑 볼 $ subRequest-> 속성 -> GET에서

('options') $ this-> kernel-> handle ($ subRequest, Ht tpKernelInterface :: SUB_REQUEST, false); InlineFragmentRenderer의 62 번째 줄에)

나는 다음에 어디로 갈지 잘 모르겠다. 나는 Symfony \ Bundle \ FrameworkBundle \ HttpKernel에있는 [\ vendor \ symfony \ symfony \ src]로 갔다고 생각했지만 거기서 어떤 활동도 추적하지 못했습니다. 나는이 같은 옵션 renderImage 컨트롤러에보고 덤프 경우

그러나 :

// MyBundle\Controller\HelperController.php 

public function renderImageAction($image, $options = array()) { 
    print_r(\Doctrine\Common\Util\Debug::dump($options)); // I'm sure there's a 1337 way to use the logger/toolbar for this, I'll figure that out some other day 
    ... 
} 

을 나는이 얻을 : 즉

array (size=2) 
    'html_options' => 
    array (size=1) 
     'class' => string 'foo' (length=3) 
    'link_options' => 
    array (size=1) 
     'class' => string 'bar' (length=3) 

을의 'link_page'객체는 를하고있다 옵션에서을 제거했습니다. 배고픈 (무언가) 무언가가 심포니의 깊이에 숨어 있고 내 물건을 먹는 것처럼 보입니다!

이 기능이 있습니까? (배열 내부의 객체를 하위 요청에 전달할 수 없다 ... 아마도 매우 엄격한 MVC 신을 분노하게한다.)
아니면 버그입니까? (무언가가 먹어서는 안되는 것들입니까?)
아니면이 스틱의 끝 부분을 완전히 잡았습니까? 나는 머리의 마지막 가닥을 잃게하기 전에

나는 컨트롤러 기능과 결합하여 렌더링 기능을 사용하면 개체를 전달할 수 있습니다

+0

사용중인'{{-' 나'{{'에 나뭇 가지 템플릿? – cheesemacfly

+0

표시된 부분에서'{{-'을 사용하고 있습니다 (템플릿의 다른 부분은 공백 제어를 사용하지 않습니다) – caponica

+0

어리석은 질문 일 수는 있지만'{{ {'? 거기에'-'는 무엇입니까? – cheesemacfly

답변

0

C ..., 누군가가 도움을 줄 수 있기를 바랍니다. 내 말은, 그것이 지원되어야하고, 당신이했던 것처럼 작동해야한다는 것입니다.

하지만 어쩌면 당신은 특별히 Doctrine2 객체에 관련이있는 것으로 보인다이 사람, 같은 버그가 발생 : https://github.com/symfony/symfony/issues/7124

관련 문제