1

public / index.php :

public function main()
{

    $this->_registerServices();

    //Register the installed modules
    $this->registerModules(array(
        'frontend' => array(
            'className' => 'Multiple\Frontend\Module',
            'path' => '../apps/frontend/Module.php'
        ),
        'backend' => array(
            'className' => 'Multiple\Backend\Module',
            'path' => '../apps/backend/Module.php'
        )
    ));

    echo $this->handle()->getContent();
}

module.php内:

class Module
{
    public function registerAutoloaders()
    {

        $loader = new \Phalcon\Loader();

        $loader->registerNamespaces(array(
            'Multiple\Frontend\Controllers' => '../apps/frontend/controllers/',
            'Multiple\Frontend\Models' => '../apps/frontend/models/',
        ));

        $loader->register();
    }

    /**
     * Register the services here to make them general or register in the ModuleDefinition to make them module-specific
     */
    public function registerServices($di)
    {

        //Registering a dispatcher
        $di->set('dispatcher', function () {
            $dispatcher = new \Phalcon\Mvc\Dispatcher();

            //Attach a event listener to the dispatcher
            $eventManager = new \Phalcon\Events\Manager();
            $eventManager->attach('dispatch', new \Acl('frontend'));

            $dispatcher->setEventsManager($eventManager);
            $dispatcher->setDefaultNamespace("Multiple\Frontend\Controllers\\");
            return $dispatcher;
        });


        //Registering the view component
        $di->set('view', function () {
            $view = new \Phalcon\Mvc\View();
            $view->setViewsDir('../apps/frontend/views/');
            $view->registerEngines(array(".phtml" => 'volt'));
            return $view;
        });
    }
}

モジュール内のメソッドregisterServices&&がどのように呼び出されるのか知りたいです。registerAutoloaders

4

1 に答える 1

1

githubでMVCリポジトリを確認できます。

https://github.com/phalcon/mvc/tree/master/multiple

アイデアは、アプリケーションに1つのエントリポイントがあるということですpublic\index.php。そのファイルには次のものがあります。

public function main()
{
    $this->_registerServices();

    //Register the installed modules
    $this->registerModules(
        array(
            'frontend' => array(
                'className' => 'Multiple\Frontend\Module',
                'path' => '../apps/frontend/Module.php'
            ),
            'backend' => array(
                'className' => 'Multiple\Backend\Module',
                'path' => '../apps/backend/Module.php'
            )
        )
    );

    echo $this->handle()->getContent();
}

ここで完全なファイルを参照してください。

これで、public\index.phpファイルに2つのモジュールがあることをPhalconに指示しました。1つはフロントエンド、もう1つはバックエンドとして、それぞれのModule.phpファイルの場所/クラスです。

これらのModule.phpファイルの1つ(フロントエンドなど)の中には、次のものがあります。

namespace Multiple\Frontend;

class Module
{

    public function registerAutoloaders()
    {

        $loader = new \Phalcon\Loader();

        $loader->registerNamespaces(
            array(
                'Multiple\Frontend\Controllers' => '../apps/frontend/controllers/',
                'Multiple\Frontend\Models'      => '../apps/frontend/models/',
            )
        );

        $loader->register();
    }

    public function registerServices($di)
    {

        //Registering a dispatcher
        $di->set(
            'dispatcher', 
            function () 
            {
                $dispatcher = new \Phalcon\Mvc\Dispatcher();

                //Attach a event listener to the dispatcher
                $eventManager = new \Phalcon\Events\Manager();
                $eventManager->attach('dispatch', new \Acl('frontend'));

                $dispatcher->setEventsManager($eventManager);
                $dispatcher->setDefaultNamespace("Multiple\Frontend\Controllers\\");
                return $dispatcher;
            }
        );

        //Registering the view component
        $di->set(
            'view', 
            function () 
            {
                $view = new \Phalcon\Mvc\View();
                $view->setViewsDir('../apps/frontend/views/');
                return $view;
            }
        );

        $di->set(
            'db', 
            function () 
            {
                return new \Phalcon\Db\Adapter\Pdo\Mysql(
                    array(
                        "host"     => "localhost",
                        "username" => "root",
                        "password" => "secret",
                        "dbname"   => "invo"
                    )
                );
            }
        );

    }

}

これらの関数は、モジュールが登録されると自動的に呼び出されます(。このモジュールではregisterModules、モジュールをさらにカスタマイズして、何が起こっているかをより適切に制御できるようにします。たとえば、あるモジュールに別のモジュールとは異なるオートローダーがある場合や、あるモジュールが別のデータベースとは異なるデータベースにアクセスするようにします。特定のにすべてのモジュールを設定できます。public\index.phpregisterAutoloadersregisterServicesModule.php

単一/複数の構成で新しいチュートリアルのセットを作成することについての話があることは知っていますが、それはまだ実現していません。

于 2012-11-05T15:21:33.777 に答える