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

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -