2

先週、ZF2 の学習を開始しました。スケルトン アプリケーションと ZfcUser モジュールを正常にインストールしました。ZfcUser Wiki で提案されているように、登録フォームを編集することにしました: https://github.com/ZF-Commons/ZfcUser/wiki/How-to-modify-the-form-objects-used-by-ZfcUser

選択フィールドを追加します。これは、公式フォームのドキュメントにあるものと同じです。

ただし、選択は入力フィールドのようにレンダリングされるため、正しく表示されません。ここで例を見ることができます 。

ここに私の 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__,
                ),
            ),
        );
    }
}

誰かがこの動作を理解して正しい方向に向けるのを手伝ってくれますか?

4

1 に答える 1

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: ?>
于 2013-01-28T09:11:20.197 に答える