Для примера создадим модуль с именем ZfCommons, который будет инициализировать переменную в Layout содержащую namespace модуля…
Для начала зарегистрируем наш модуль в application.config.php:
[cc lang=»php»]
return array(
‘modules’ => array(
‘Application’,
‘ZfCommons’,
),
‘module_listener_options’ => array(
‘config_glob_paths’ => array(
‘config/autoload/{,*.}{global,local}.php’,
),
‘module_paths’ => array(
‘./module’,
‘./vendor’,
),
),
);
[/cc]
И создадим функцию в Module.php:
[cc lang=»php»]
namespace ZfCommons;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface,
Zend\ModuleManager\Feature\ConfigProviderInterface,
Zend\Mvc\MvcEvent;
class Module implements
AutoloaderProviderInterface,
ConfigProviderInterface
{
public function onBootstrap($e)
{
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach(‘dispatch’, array($this, ‘loadConfiguration’ ));
}
public function loadConfiguration(MvcEvent $e)
{
$controller = $e->getTarget();
$controllerClass = get_class($controller);
$moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, ‘\\’));
//set ‘variable’ into layout…
$controller->layout()->modulenamespace = $moduleNamespace;
}
public function getAutoloaderConfig(){ /* common code */ }
public function getConfig(){/* common code */}
}
[/cc]
В Layout можете вызвать:
[cc lang=»php»]
Current Module Namespace is < ?php echo $this->modulenamespace; ?>
[/cc]
Как получить эту переменную в view:
[cc lang=»php»]
Current Module Namespace is < ?php echo $this->layout()->modulenamespace; ?>
[/cc]
Также можно установить эту переменную следующим образом:
[cc lang=»php»]
$e->getViewModel()->setVariable(‘modulenamespace’, $moduleNamespace);
[/cc]
Ссылка на оригинал