不推荐修改模块目录中的任何内容/vendor/
,尤其是那些放在. 这也是必须将配置模板复制到您自己的/config/autoload/
目录的原因。
一个模块必须提供足够的扩展点以使其足够灵活以供您使用。这些可能性包括以下选项:
更改路线
ZfcUser 模块在 /user url 下注册自己。例如,如果您想将其更改为 /account,您可以简单地将其添加到您的配置中:
<?php
return array(
'di' => array(
'instance' => array(
'Zend\Mvc\Router\RouteStack' => array(
'parameters' => array(
'routes' => array(
'zfcuser' => array(
'options' => array(
'route' => '/account',
),
),
),
),
),
),
),
);
更换控制器
如果您不满意ZfcUser\Controller\UserController
使用该控制器并且想要覆盖此控制器中的某些操作,您可以创建一个自定义控制器,例如MyUser\Controller\UserController
. 如果您扩展ZfcUser\Controller\UserController
并提供此配置,您就可以开始了:
<?php
return array(
'di' => array(
'instance' => array(
'Zend\Mvc\Router\RouteStack' => array(
'parameters' => array(
'routes' => array(
'zfcuser' => array(
'options' => array(
'defaults' => array(
'controller' => 'MyUser\Controller\UserController'
),
),
),
),
),
),
),
),
);
您还可以使用 DI 别名来覆盖zfcuser
DI 配置中的别名:
<?php
return array(
'di' => array(
'instance' => array(
'alias' => array(
'zfcuser' => 'MyUser\Controller\UserController'
),
),
),
);
修改表单实例
例如,ZfcUser 模块触发几个事件来帮助其他模块挂钩到表单创建过程。两个ZfcUser\Form\Login
as在设置所有表单元素后都会ZfcUser\Form\Register
触发一个事件。init
这使您有机会添加或删除元素。
use Zend\EventManager\StaticEventManager;
$events = StaticEventManager::getInstance();
$events->attach('ZfcUser\Form\Login', 'init', function ($e) {
$form = $e->getTarget();
$form->addElement('text', 'something-new');
});
在这里我需要说两句:
- 每个模块都必须提供自己的触发器。这个 ZfcUser
init
在两种形式上都有,但这并不是每个模块都给定的。您必须查看文档或源代码才能了解这一点。
- 目前
Zend\EventManager
正在重构中,StaticEventManager
用一个SharedEventManager
可以通过Zend\Di
定位器实例化的实例来替换单例。您可以在此 Pull Request中查看此重构的进度。
更改视图或表单呈现
根据此 RFC,Zend\Form
组件可能会更改。特别是对于渲染,装饰器将被删除,“只是”普通视图助手将渲染表单。有了这个,加上覆盖视图的可能性,只需使用另一个只有一些视图脚本的模块就可以很容易地更改动作的呈现。
如果您创建自己的模块并提供此配置,则会将新位置添加到模板路径堆栈:
<?php
return array(
'di' => array(
'instance' => array(
'Zend\View\Resolver\TemplatePathStack' => array(
'parameters' => array(
'paths' => array(
'myuser' => __DIR__ . '/../view',
),
),
),
),
),
);
现在您可以在模块view
目录中创建视图脚本。如果您的模块名为“MyUser”并且位于下面/modules/MyUser
,并且您想从 ZfcUser 覆盖登录视图脚本(位于 中/vendor/ZfcUser/view/zfcuser/login.phtml
,请在/modules/MyUser/view/zfcuser/login.phtml
.