1

私はZF 1を持っており、多くのルーティングやその他のpreDispatchのものを使ってBootstrap.phpを動かしています。

しかし、ZF2 には Bootstrap.php の概念がなくなりましたか? または、Zf2でこれと同じことを行うにはどうすればよいですか?

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

  protected function _initPdispatch() {
    $this->bootstrap('frontController');
    require_once APPLICATION_PATH . '/controllers/plugin/LanguageSelector.php';
    $plugin = new LanguageSelector();
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin($plugin);
    return $plugin;
  }

  protected function _initRoutes() {
    $front = Zend_Controller_Front::getInstance();
    $router = $front->getRouter();
    $dynamic1 = new Zend_Controller_Router_Route(
                    '/:variable1',
                    array(
                        'controller' => 'router',
                    ),
//              array('variable1' => '^[a-zA-Z0-9_-]*$')
                    array('variable1' => '^[\w.-]*$')
    );
    $router->addRoute('dynamic1', $dynamic1);
  }
4

1 に答える 1

0

ZF2の最も優れた機能の1つは、私が最初に実際に嫌っていたもの、つまりルートです。すべてのモジュールのルートを設定する必要があるため、これはすばらしいことであり、煩わしいことでもあります。

ZF2を(より迅速に)理解することの一部は、モジュールを理解することです。これを乗り越えることができれば、はるかに迅速に適応し始めるでしょう。(少なくともそれは私にとってはそうだった)。では、ZF2のモジュールとは何ですか?なんでも!

とにかく、すべてのモジュールとアプリケーションのすべての構成ファイルは、最終的にZend Framework内でマージされるため、実際にどこにでもルートを定義できます。

そうは言っても、ルートはファイルの一部であるため、ルートを「ブートストラップ」する必要はありませんModuleName/config/module.config.php。今。

現在、私はZF2内の正規表現ルートの専門家ではありませんが、次のようになります。

// MyModule/config/module.config.php
return array(
    'router' => array(
        'routes' => array(
            'dynamic1' => array(
                'type' => 'regex',
                'options' => array(
                    'route' => '/[:variable1]'
                )
            )
        )
    )
);

どこかで正規表現を定義します。さらに、彼らのドキュメントで、正規表現ルートを手動で定義することもできることを確認しました。

use Zend\Mvc\Router\Http\Regex;

// ...

$route = Regex::factory(array(
    'regex' => '/blog/(?<id>[a-zA-Z0-9_-]+)(\.(?<format>(json|html|xml|rss)))?',
    'defaults' => array(
        'controller' => 'Application\Controller\BlogController',
        'action'     => 'view',
        'format'     => 'html',
    ),
    'spec' => '/blog/%id%.%format%',
));

$router->addRoute($route);

onBootstrap()Skeletonアプリケーションを使用している場合は、これをサービスとして追加するか、アプリケーションモジュール内に配置できるはずです。

それが彼らの例であり、繰り返しになりますが、私はこれに関する専門家ではないことを覚えておいてください。ここにいくつかの詳細があります。

お役に立てれば!

于 2012-10-22T09:07:20.890 に答える