1

Zend Framework について学ぶために使用することになっているプロジェクトの一部として、基本的な認証システムを作成しようとしています。アプリケーションの作成に Zend CLI ツールを使用しています。Admin というモジュールがあり、その中に Auth というコントローラーがあります。ただし、ブラウザーでコントローラーに移動しようとすると、次のエラーが発生します。

An error occurred

Page not found

Exception information:

Message: Invalid controller specified (auth)

Stack trace:

#0 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#2 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 /home/www-data/zend.danielgroves.net/htdocs/public/index.php(26): Zend_Application->run()
#4 {main}  
Request Parameters:

array (
  'module' => 'admin',
  'controller' => 'auth',
  'action' => 'index',
)

zend.danielgroves.netにアクセスして、これを自分で確認できます

すべてに正しい名前が付けられていることがわかる限り、以下のスクリーンショットを見て、CLI ツールによってすべてがどのように構成されているかを確認してください。これは、このログイン システムhttp://akrabat.com/zend-auth-tutorial/を構築するために私が従ったガイドです。ログイン画面のスクリーンショット(最初の画像)の部分にたどり着きました。

Zend ディレクトリ/ファイル構造

どんな助けでも大歓迎です。

編集1

私の application.ini ファイルは、@ByteNudger によって提案された変更を投稿します。

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0

resources.db.adapter = "Pdo_Mysql"
resources.db.params.charset = "utf8"
resources.db.params.host = "localhost"
resources.db.params.username = ""
resources.db.params.password = ""
resources.db.params.dbname = ""

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

resources.modules[] = "" (section [bootstrap])

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

application.ini の変更によって生成される PHP エラー:

PHP Fatal error:  Uncaught exception 'Zend_Config_Exception' with message 'syntax error, unexpected '(' in /home/www-data/zend.danielgroves.net/htdocs/application/configs/application.ini on line 20' in /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Config/Ini.php:182
Stack trace:
#0 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Config/Ini.php(202): Zend_Config_Ini->_parseIniFile('/home/www-data/...')
#1 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Config/Ini.php(126): Zend_Config_Ini->_loadIniFile('/home/www-data/...')
#2 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application.php(386): Zend_Config_Ini->__construct('/home/www-data/...', 'development')
#3 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application.php(85): Zend_Application->_loadConfig('/home/www-data/...')
#4 /home/www-data/zend.danielgroves.net/htdocs/public/index.php(24): Zend_Application->__construct('development', '/home/www-data/...')
#5 {main}
  thrown in /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Config/Ini.php on line 182

編集2:

わかりました、以下のロス スミス II の回答で提案されていることを試してみました。私のapplication.iniファイルは次のようになります。

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/modules/admin/controllers"

resources.frontController.params.displayExceptions = 0

resources.db.adapter = "Pdo_Mysql"
resources.db.params.charset = "utf8"
resources.db.params.host = "localhost"
resources.db.params.username = ""
resources.db.params.password = ""
resources.db.params.dbname = ""

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.defaultModule = "admin"
resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts/"
resources.modules[] =

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

そして、ブラウザでこのエラーが発生しています:

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Dispatcher/Standard.php:248 Stack trace: #0 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() #2 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #3 /home/www-data/zend.danielgroves.net/htdocs/public/index.php(26): Zend_Application->run() #4 {main} Next exception 'Zend_Controller_Exception' with message 'Invalid controller specified (error)#0 /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(O in /home/www-data/zend.danielgroves.net/htdocs/library/Zend/Controller/Plugin/Broker.php on line 336

自分の目で確かめてください: http://zend.danielgroves.net/admin/auth/

編集 3

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/modules/admin/controllers"

resources.frontController.params.displayExceptions = 0

resources.db.adapter = "Pdo_Mysql"
resources.db.params.charset = "utf8"
resources.db.params.host = "localhost"
resources.db.params.username = ""
resources.db.params.password = ""
resources.db.params.dbname = ""

resources.modules[] = ""

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
4

3 に答える 3

0

モジュールを Zend で正しく動作させることは、非常に困難な場合があります。複数のデータベース接続が初期化される (モジュールごとに 1 つ) など、多数の予期しない問題が発生しました。

まず、application.ini以下を含めるように変更します。

resources.frontController.controllerDirectory = APPLICATION_PATH "/modules/Admin/controllers"
resources.frontController.defaultModule = "Admin"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

resources.layout.layoutPath = APPLICATION_PATH "/modules/Admin/layouts/scripts/"

resources.modules[] =

それでも問題が解決しない場合は、大文字のモジュール名を使用したことがないため、変更Adminしてみてください。admin

application.iniそれでも問題が解決しない場合は、ファイルを投稿してください。

于 2012-07-19T14:42:25.380 に答える
0

これは私が数ヶ月前にやったものです

コード全体はhttps://github.com/harikt/blogで見ることができ ます

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""
autoloadernamespaces[] = "BinaryKitten"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.view[] = 

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

Bootstrap.php 内

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    public function _initControllerPlugins()
    {
        $plugin = Zend_Controller_Front::getInstance()->registerPlugin(
            new BinaryKitten_ModuleConfig()
        );
    }

    public function _initAutoload()
    {
        $moduleLoader = new Zend_Application_Module_Autoloader(
            array(
                'namespace' => '',
                'basePath'  => APPLICATION_PATH . "/modules/default"
            )
        );
        return $moduleLoader;
    }
}

問題の解決に役立つことを願っています。

于 2012-07-24T07:10:42.100 に答える
0

モジュールを ZF 1.11 のアプリケーションで動作させるために追加したのは、私の application.ini にあるこれらの 3 行だけです。

resources.frontController.moduleControllerDirectoryName = "controllers"
resources.modules = ""
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

Bootstrap.phpまた、自動読み込みを正しく機能させるには、次のように各モジュールに空を入れることを忘れないようにしてください。

<?php
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
    //put your code here
}

また、デフォルトモジュールのプレフィックスを指定することは、いくつかの構成で役立つ場合があります.私のものは次のようになります:

resources.frontController.params.prefixDefaultModule = ""

私のデフォルトのモジュールは、コントローラー、モデル、およびビューの元のアプリケーション ディレクトリです。現在の構成によく似ています。

[編集]

OK、あなたは少し混乱してしまいました。おそらく、私が学んだZF 1.x のモジュールに関する Rob Allen のチュートリアルを見てください。

于 2012-07-20T12:58:09.957 に答える