좋아, 우선 면책 조항. 저는 첫 번째 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 신을 분노하게한다.)
아니면 버그입니까? (무언가가 먹어서는 안되는 것들입니까?)
아니면이 스틱의 끝 부분을 완전히 잡았습니까? 나는 머리의 마지막 가닥을 잃게하기 전에
사용중인'{{-' 나'{{'에 나뭇 가지 템플릿? – cheesemacfly
표시된 부분에서'{{-'을 사용하고 있습니다 (템플릿의 다른 부분은 공백 제어를 사용하지 않습니다) – caponica
어리석은 질문 일 수는 있지만'{{ {'? 거기에'-'는 무엇입니까? – cheesemacfly