전체 응용 프로그램 (전역)에서 내 layout.phtml에 일련의 변수를 전달하고 싶습니다. 그리고 나는 사용하고 싶지 않다는 의미입니다.
$this->layout()->someVar = someValue;
많은 추가 작업과 코드가 필요하기 때문에 내가 가진 모든 작업에서. 한 곳에서 할 수있는 방법이 있습니까? 또는 내가 언급 한 것은 내가 가진 전부입니다! 그렇지 않길 :)
세션을 사용하고 계십니까? – 레미 토마스
솔루션에 감사드립니다. 당분간 그게 내가 사용하는 것입니다. 로그인 한 사용자 정보, 시스템 및 레이아웃 설정, ACL 목록. 하지만 문제는 내가 적절하지 않다고 생각하는 layout.phtml에 새로운 객체를 정의해야한다는 것입니다. 뷰 모델에서 사용해야하는 모든 데이터는 컨트롤러 작업을 사용하여 전달되어야한다고 어딘가에서 읽었습니다. 그리고 특히 저는 모서리를 자르는 팬이 아니기 때문에 이렇게 할 수있는 깨끗한 방법이 있다면 차라리이 방법을 사용하지 않는 것이 좋습니다. 그리고 최근에는 각 사용자의 읽지 않은 메시지 수를 가져와 layout.phtml에서 사용해야합니다. 따라서 layout.phtml에서 수행하면 뷰 모델 또는 레이아웃 내부에 많은 PHP 스크립트가 있습니다.
감사
가장 좋고 깨끗한 방법은 Orochi가 제안한 것처럼 ViewHelper를 사용하는 것입니다. 고유 한 ViewHelper를 만드는 방법은 다음과 같습니다. http://framework.zend.com/manual/2.2/en/modules/zend.view.helpers.advanced-usage.html . 너무 복잡하지 않습니다.)
그러나 문제는 다른 방법으로도 해결 될 수 있습니다. 필요한 변수에 이미 애플리케이션에있는 서비스에서 제공 한 값이 포함되어 있다고 가정하면 (그리고 ZF2 ServiceManager에 의해 노출됨) Module.php 내의 "onBoostrap"함수 (예 : 애플리케이션 모듈)에 몇 줄을 추가 할 수 있습니다.
다음은 예입니다.
public function onBootstrap($e) {
$serviceManager = $e->getApplication()->getServiceManager();
$viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
$myService = $serviceManager->get('MyModule\Service\MyService');
$viewModel->someVar = $myService->getSomeValue();
}
이런 식으로 한 곳에서만 과제를 작성합니다. 그런 다음 평소와 같이 변수에 액세스 할 수 있습니다.
$this->layout()->someVar;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다