在Zend框架中设置模块名称,控制器名称和操作名称?

时间:2017-02-06 11:32:53

标签: zend-framework zend-framework2

我最近开始使用Zend Framework进行编程。我想在我的框架中更改模块的模块名称控制器名称操作名称通过编码,在同一框架内编码。

它的名称是应用程序(模块和控制器),我想将其更改为 Institute 。这可以通过编码吗?

我在Google上搜索了一些帮助,但要么我找不到它,要么正确理解它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

这只是一个重命名的案例:

在模块的所有类中更新所有名称空间从Application到Institute,包括Module.php

更新控制器的名称及其在config / module.config.php

中的条目

如果您在模块中有一个名称,即查看/应用程序/索引等以查看/ institute / index,请确保更新视图目录的名称,并确保将module.config.php中的条目更新为相同路径

将应用程序目录的名称更新为Institute

更新modules.config.php中模块数组中的名称,或者如果您使用模块密钥下的早期版本application.config.php。

这就是我能想到你需要做的一切

********编辑********

所以基本思路如下:

在一个新模块中添加一个控制台(我使用过zend mvc console但你应该使用https://github.com/zfcampus/zf-console,因为不推荐使用mvc控制台)

module.config.php

<?php
namespace Rename;

use Zend\ServiceManager\Factory\InvokableFactory;

return [
  'console' => array(
      'router' => array(
          'routes' => array(
              'rename-module' => array(
                    'options' => array(
                        'route'    => 'module rename <moduleNameOld> <moduleNameNew>',
                        'defaults' => array(
                            'controller' => Controller\IndexController::class,
                            'action'     => 'rename'
                        )
                    )
              )
          )
      )
  ),
  'controllers' => [
      'factories' => [
          Controller\IndexController::class => InvokableFactory::class,
      ],
  ],
];

IndexController.php

<?php
namespace Rename\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Console\Request as ConsoleRequest;
use Zend\Mvc\Console\Controller\AbstractConsoleController;

class IndexController extends AbstractConsoleController
{
    public function renameAction()
    {
        $request = $this->getRequest();

        // Make sure that we are running in a console and the user has not tricked our
        // application into running this action from a public web server.
        if (!$request instanceof ConsoleRequest) {
            throw new \RuntimeException('You can only use this action from a console!');
        }

        $moduleNameOld  = $request->getParam('moduleNameOld');
        $moduleNameNew  = $request->getParam('moduleNameNew');

        $module = file_get_contents(getcwd() . "/module/$moduleNameOld/src/Module.php", 'r+');
        $updatedModule = str_replace($moduleNameOld, $moduleNameNew, $module);
        file_put_contents(getcwd() . "/module/$moduleNameOld/src/Module.php", $updatedModule);

        rename("module/$moduleNameOld", "module/$moduleNameNew");
    }
}

这可以像

一样运行
php public/index.php module rename Application Institute

我刚刚在这里重命名模块并在Module.php中重命名命名空间

要完成此操作,您需要以递归方式查找Application目录中的所有.php文件,并循环应用字符串替换(应该真正改进)。然后,您可以使用类似的逻辑并使用上述步骤更新视图和应用程序级别配置。

我写的代码非常糟糕,可能不安全但可能会帮助你