popov / zfc-block
单独创建带有html、css、js等的自定义模板块。
0.0.1
2018-03-14 12:09 UTC
Requires
- php: ^5.6 || ^7.0
This package is auto-updated.
Last update: 2024-09-07 04:14:31 UTC
README
单独创建带有html、css、js等的自定义模板块。
用法
对于Expressive:在config/config.php中注册ZfcBlock模块,使用Popov\ZfcBlock\ConfigProvider::class。
对于MVC:在您的配置中使用Popov\ZfcBlock进行注册。
在您的模块中创建名为LoginBlock的新Block类
// src/Your/Module/src/Block/LoginBlock.php namespace Stagem\Visitor\Block; use Popov\ZfcBlock\Block\Core; use Popov\ZfcUser\Form\LoginForm; class LoginBlock extends Core { /** * @var LoginForm */ protected $loginForm; public function __construct(LoginForm $loginForm) { $this->loginForm = $loginForm; } public function getLoginForm() { return $this->loginForm; } }
该类必须继承Popov\ZfcBlock\Block\Core以允许使用基本功能,如翻译、检查权限和其他辅助机会。
下一步你可以
- 为该块创建
Factory; - 使用
ReflectionFactory,如果在开发中,这将很方便。在您的config/autoload/dependencies.global.php中注册工厂。return [ // ... 'block_plugins' => [ 'abstract_factories' => [ Zend\ServiceManager\AbstractFactory\ReflectionBasedAbstractFactory::class ], ] ];
如果您决定使用ReflectionFactory,则需要向配置添加您的块的别名
// src/Stagem/Visitor/config/module.config.php return [ // ... 'block_plugins' => [ 'aliases' => [ 'VisitorLogin' => \Your\Module\Block\LoginBlock::class, ], ], 'block_plugin_config' => [ 'default' => [ \Your\Module\Block\LoginBlock::class => [ 'template' => 'visitor::login' ], ], ], ];
请注意。不要在生产环境中使用
ReflactionFactory,为您的块类创建真正的Factory。
之后,您可以在任何模板中使用以下方式调用您的块:
<div>
<?= $this->block()->render('VisitorLogin') ?>
</div>
或以下高级用法的相同示例
<div>
<?php $loginBlock = $this->block('VisitorLogin'); ?>
<?= $this->block()->render($loginBlock) ?>
</div>
高级用法可以用于设置额外的参数。
例如,块模板可以具有以下视图
// src/Your/Module/view/visitor/login.phtml <?php $form = $block->getLoginForm(); $form->setAttribute('action', $this->url('default', [ 'controller' => 'visitor', 'action' => 'login', ])); $form->prepare(); ?> <?= $this->form()->openTag($form) ?> <div class="modal-content"> <div class="right-side"> <div class="form-group"> <label for="user"><?= $form->get('email')->getLabel() ?>:</label> <?= $this->formElement($form->get('email')) ?> </div> <div class="form-group"> <label for="password"><?= $form->get('password')->getLabel() ?>:</label> <?= $this->formRow($form->get('password')) ?> </div> </div> </div> <?= $this->form()->closeTag() ?>
配置
block_plugin_config在配置文件中用于设置Block的一些特定配置。所有配置参数都将通过setter设置。
default键为Block设置通用配置- 还可以按
resource/action设置配置,其中resource在大多数情况下是来自URL的controller或module。
return [ // ... 'block_plugins' => [ 'aliases' => [ 'VisitorLogin' => \Your\Module\Block\LoginBlock::class, ], ], 'block_plugin_config' => [ 'visitor/login' => [ \Your\Module\Block\LoginBlock::class => [ 'template' => 'visitor::login' ], ], ], ];
如果您需要在您的Block中使用一些复杂参数,请使用Factory来完成此目的。
类型
- 列表(阵容)
在动作中
public function process(\Psr\Http\Message\ServerRequestInterface $request) { $viewModel = (new ViewModel())->setTemplate('block::list') ->addChild($viewModelOne, 'one') ->addChild($viewModelTwo, 'two') ->addChild($viewModelThree, 'three'); return $viewModel; }
您的所有块将自动逐个渲染。