gpt4 book ai didi

zend-framework2 - ZF2,使用供应商模块的表单类的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-04 01:22:30 25 4
gpt4 key购买 nike

我应该如何将自定义样式应用于供应商模块的表单或将其嵌入到我自己的 View 脚本中?
更具体地说,我想使用 EdpUser 模块 (https://github.com/EvanDotPro/EdpUser) 提供的表单。

最简单的方法似乎是直接修改供应商的脚本。但显然这会与供应商 future 的更新相冲突。

另一种方法似乎是将供应商的 Controller 复制到我自己的模块中,然后提供我自己的 View 。但是,这会遇到与供应商 future 更新不同步的类似问题。而且我必须小心命名空间。

也许我应该扩展供应商的 Controller 而不是复制它。这应该适用于命名空间,并且我应该能够很容易地访问我的 Controller 中的表单。在使用我自己的 View 脚本时。这是正确的方法还是有更好的方法?

谢谢

最佳答案

不推荐修改模块目录中的任何内容,尤其是那些放在 /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',
),
),
),
),
),
),
),
);

更换 Controller

如果您不满意 ZfcUser\Controller\UserController被使用并且您想要覆盖此 Controller 中的某些操作,您可以创建自定义 Controller ,例如 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 模块触发几个事件来帮助其他模块 Hook 到表单创建过程。 ZfcUser\Form\LoginZfcUser\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 实例化的实例定位器。您可以在 this Pull Request 中查看此重构的进度.

  • 更改 View 或表单呈现

    根据 this RFC Zend\Form组件可能会发生变化。特别是对于渲染,装饰器将被删除,“只是”普通 View 助手将渲染表单。有了这个,加上覆盖 View 的可能性,只需使用另一个只有一些 View 脚本的模块就可以很容易地更改 Action 的呈现。

    如果您创建自己的模块并提供此配置,则会将新位置添加到模板路径堆栈:
    <?php
    return array(
    'di' => array(
    'instance' => array(
    'Zend\View\Resolver\TemplatePathStack' => array(
    'parameters' => array(
    'paths' => array(
    'myuser' => __DIR__ . '/../view',
    ),
    ),
    ),
    ),
    ),
    );

    现在您可以在模块的 view 中创建 View 脚本了。目录。如果您的模块名为“MyUser”并且位于 /modules/MyUser 下并且您想覆盖来自 ZfcUser 的登录 View 脚本(位于 /vendor/ZfcUser/view/zfcuser/login.phtml 中,在 /modules/MyUser/view/zfcuser/login.phtml 中创建您的 View 脚本。

    关于zend-framework2 - ZF2,使用供应商模块的表单类的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8783873/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com