3

新しいフレームワークの Form フォルダーを Zend Framework 1 のものと交換しようとしましたが、うまくいきませんでした。

また、ZF1 を新しい Form 2.0 フォルダのライブラリに向けようとしましたが、それも機能しません。

誰かがそれを行う方法を知っていますか?

4

1 に答える 1

4

ZF1 で ZF2 コンポーネントを使用することは可能であり、ほとんどの場合、比較的単純です。

まず、zf2 をライブラリ パスにクローンする必要があるため、cd して次のように入力しますlibrary

git clone https://github.com/zendframework/zf2.git Zf2

これにより、ライブラリの下に Zf2 フォルダーが作成されます。

ここで、zf2 ファイルの検索方法をオートローダーに伝える必要があります。ブートストラップに次を追加します:-

protected function _initZf2()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->pushAutoloader(new App_Loader_Autoloader_Zf2(), 'Zend');
}

次に、オートローダーを作成します。私はこの行でapplication.iniに含まれているApp_という名前の名前空間を持っています:-

autoloadernamespaces[] = "App_"

App/Loader/Autoloader/Zf2.php にオートローダーを作成しました:-

class App_Loader_Autoloader_Zf2 implements Zend_Loader_Autoloader_Interface
{
    public function autoload($class)
    {
        if(strstr($class, '\\')){
            $zf2Class = explode('\\', $class);
            $path = 'Zf2/library/' . implode('/', $zf2Class) . '.php';
            include_once $path;
        }
    }
}

これで、zf1 は、正しい名前空間が提示されたときに zf2 クラスを見つける場所を認識します。Application/Forms/Zf2.php などのフォームを作成できます:-

use Zend\Form\Form;
use Zend\Form\Element;
use Zend\Form\Element\Text;

class Application_Form_Zf2 extends Form

{
    public function prepareElements()
    {
        $this->add(array(
            'name' => 'name',
            'options' => array(
                'label' => 'Your name',
            ),
            'attributes' => array(
                'type'  => 'text',
            ),
        ));
    }
}

これで、コントローラーで zf2 フォームをインスタンス化できます。

$this->view->form = new Application_Form_Zf2();
$this->view->form->prepareElements();

ZF1 ビューを使用しているため、ZF2 フォームのレンダリングに使用されるビュー ヘルパーに自動的にアクセスできないため、必要に応じてビューで明示的にインスタンス化する必要があります。

$form = $this->form;
$formHelper = new \Zend\Form\View\Helper\Form();
$formText = new \Zend\Form\View\Helper\FormText();
$formLabel = new \Zend\Form\View\Helper\FormLabel();
echo $formHelper->openTag($form);
echo $formLabel($form->get('name'));
echo $formText($form->get('name'));
echo $formHelper->closeTag($form);

これにより、次の HTML が出力されます。

<form action="" method="POST">
    <label for="name">Your name</label>
    <input name="name" type="text" value="">
</form>

この方法を使用すると、フォームの出力を細かく制御できます。上記の phtml ファイルに記述したコードの一部を ZF1 ビュー ヘルパーで非表示にすることをお勧めします。

于 2012-10-19T10:11:11.693 に答える