我上周开始学习ZF2。我已经成功安装了骨架应用程序和ZfcUser模块。 我决定按照ZfcUser Wiki中的建议编辑注册表: https://github.com/ZF-Commons/ZfcUser/wiki/How-to-modify-the-form-objects-used-by-ZfcUser
并添加一个选择字段,您可以在官方表单中找到相同的文档。
但是选择没有正确显示,因为它像输入字段一样呈现。你可以看到 here一个例子。
这是我的Application / Module.php
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Application;
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
use Zend\Form\Form;
class Module
{
public function onBootstrap(MvcEvent $e)
{
$e->getApplication()->getServiceManager()->get('translator');
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$events = $e->getApplication()->getEventManager()->getSharedManager();
$events->attach('ZfcUser\Form\Register','init', function($e) {
$form = $e->getTarget();
$form->add(array(
'type' => 'Zend\Form\Element\Select',
'options' => array(
'label' => 'Which is your mother tongue?',
'value_options' => array(
'0' => 'French',
'1' => 'English',
'2' => 'Japanese',
'3' => 'Chinese',
),
),
'name' => 'language'
));
});
$events->attach('ZfcUser\Form\RegisterFilter','init', function($e) {
$filter = $e->getTarget();
// Do what you please with the filter instance ($filter)
});
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
}
拜托,任何人都可以帮助我理解这种行为,并指出我正确的方向吗?
答案 0 :(得分:4)
您的代码很好,问题在于用户模块提供的用于呈现表单的标准视图。
register.phtml
<dd><?php echo $this->formInput($element) . $this->formElementErrors($element) ?></dd>
这是使用输入视图helepr来渲染任何额外的元素。这应该是formElement帮助器,它是一个通用的帮助器,可以根据它的类型呈现任何元素:
<dd><?php echo $this->formElement($element) . $this->formElementErrors($element) ?></dd>
这会产生魅力,但最好添加一个额外的检查,例如:
<?php elseif ($element instanceof Zend\Form\Element\Select): ?>
<dd><?php echo $this->formSelect($element) . $this->formElementErrors($element) ?></dd>
<?php else: ?>