zend framework2 - ZF2 Modules in Subfolders -
due large project realised in zf2, came across following problem , seem misunderstand handling of namepaces.
the project have lot of modules of similar groups. have 4 groups (a, b, c, d) , modules in group deal input example. in order make sure, not end folder containing 200 modules, want group ones belong reasons of cleanliness.
so wish following structure:
/config /module /mainapplication <- accesses modules /groupa /module1 /module2 /groupb /module3 /module4 ...
i adjusted namespace groupa\module1
, adjusted routes accordingly , paths seem correct , yet errors saying example template files cannot accessed.
can give me hint have pay attention when move model /modules/module1
/modules/subfolder/module1
.
what tried
changed namespaces to: ------------------------------------------- groupa\module1[\controller]; /config/application.php: --------------------------------------------- ... 'modules' => array( 'groupa\module1', ), ... /module/groupa/module.php: ------------------------------------------- ... 'route' => '/', 'defaults' => array( 'controller' => 'groupa\module1\controller\index', 'action' => 'index', ), ... 'controllers' => array( 'invokables' => array( 'groupa\module1\controller\index' => 'groupa\module1\controller\indexcontroller'
currently, module not supposed much. showing index.phtml template. error following:
fatal error: uncaught exception 'zend\view\exception\runtimeexception' message 'zend\view\renderer\phprenderer::render: unable render template "groupa/index/index"; resolver not resolve file' in /users/xxx/sites/zf2helloworld/vendor/zend/view/renderer/phprenderer.php:461 stack trace: #0 /users/xxx/sites/zf2helloworld/vendor/zend/view/view.php(203): zend\view\renderer\phprenderer->render(object(zend\view\model\viewmodel)) #1 /users/xxx/sites/zf2helloworld/vendor/zend/view/view.php(231): zend\view\view->render(object(zend\view\model\viewmodel)) #2 /users/xxx/sites/zf2helloworld/vendor/zend/view/view.php(196): zend\view\view->renderchildren(object(zend\view\model\viewmodel)) #3 /users/xxx/sites/zf2helloworld/vendor/zend/mvc/view/http/defaultrenderingstrategy.php(128): zend\view\view->render(object(zend\view\model\viewmodel)) #4 [internal function]: zend\mvc\view\http\defaultrenderingstrategy->render(object(zend\mvc\mvcevent)) #5 /users/xxx/sites/zf2helloworld/vendor/zend/eventmanager/ev in /users/xxx/sites/zf2helloworld/vendor/zend/view/renderer/phprenderer.php on line 461
am missing obvious? why can template not found? echoed 'template_path_stack'
, seems correct:
/users/xxx/sites/zf2helloworld/module/groupa/module1/view
i aware of reusability of modules , such. still love group modules belong same folder , preferably access them via proper url (groupname/module).
thank time!
first of all, per psr-0 standard classnames must have following structure: \<vendor name>\(<namespace>\)*<class name>
.
meaning module name should <vendor name>\<module\name>
as template name, default fqcn of controller converted template first namespace/controller class name/controller action name
meaning groupa\module1\controller\indexcontroller
controller give template name groupa/index/index
(and not groupa/module1/index/index
might expect) resolved file groupa/index/index.phtml
in paths defined in template_path_stack
this default behaviour , cannot changed without backwards compatibility break. mitigate since zf2.3 there new setting allow use modules way want. controller_map
under view_manager
config section.
how use can read here: https://github.com/zendframework/zf2/pull/5670
'view_manager' => array( 'controller_map' => array( // groupa\module1\controller\indexcontroller -> groupa\module1\index\index // -> module/groupa/module1/view/groupa/module1/index/index.phtml 'groupa\module1' => true, ), );
Comments
Post a Comment