2012-10-15 3 views
1

몇 가지 기본 기능을 갖춘 기본 번들과 고급 기능을위한 특정 번들이있는 제어판 응용 프로그램을 만듭니다.다른 번들의 뷰에 인수 전달 - symfony2

예를 들어 기본 번들은 사용자 인증을 처리하고 모든 템플릿 자산 및 기타 번들을 보유하여 운영 체제의 다른 부분을 구성하는 기능을 추가합니다.

기본 번들의 레이아웃에있는 메뉴 링크를 다른 번들 각각에 추가 할 수 있어야합니다. 각 번들 구성에서이 작업을 수행하여 다른 클라이언트의 기능을 혼합하고 일치시킬 수 있습니다.

나는 컴파일러 패스, 확장 및 의존성 삽입에 관한 모든 내용을 읽었습니다. 그것을하는 것이 맞습니까?

답변

0

내가이 달성 방법이다. 변수를 클래스 내부의 정적 변수에 저장합니다.

namespace Mbs\OtherBundle\Listener; 

use Mbs\BaseBundle\Services\GlobalVars; 
use Symfony\Component\HttpKernel\Event\FilterControllerEvent; 

class ControllerListener 
{ 
    protected $_global_vars; 

    public function __construct(GlobalVars $global_vars) 
    { 
     $this->_global_vars = $global_vars; 
    } 

    public function onKernelController(FilterControllerEvent $event) 
    { 
     $this->_global_vars->append('bundles', 'mbs.other'); 
    } 
} 

이 번들 중 하나에 대한 내 services.yml입니다 : 그때 내 모든 번들 청취자를 추가했다. GlobalVars는 앞서 언급 한 클래스입니다.

services: 
    mbs.base_controller_listener: 
     class: Mbs\OtherBundle\Listener\ControllerListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.controller, method: onKernelController } 
     arguments: [ @mbs.global_vars ] 
0

이 트릭을 할해야 나뭇 가지를 사용하는 경우 ...

{% render "DifferentBundle:ControllerName:functionalityName" with {'argument_name': 3} %} 

당신은 작동이에 대한 DifferentBundle 컨트롤러에 functionalityNameAction 방법이 있어야합니다.

문서의 Creating and using Templates - Embedding Controllers 섹션을 살펴보십시오.

희망이 있습니다.

내가 __get, __set, __isset를 구현하고 마법 방법을 __unset 및 추가 APPEND 방법을 가지고 내 BaseBundle에서 서비스를 만들어 : 사람이 여기에, 비슷한 문제를 가지고 그냥 경우

+0

문제는 링크 메뉴를 삽입하는 데 필요한 번들 수가 얼마나되는지 모르겠습니다. 다른 번들이 기본 번들에 링크를 추가하기를 원합니다. – Menthas

+0

나는 그것이 불가능하다고 생각한다. 대신 다른 번들 링크를 기본 번들에 포함시켜야합니다. –