0

この素晴らしいカレンダー を自分のプロジェクトに統合しようとしています。サービスのことで困ります。私はこの種の構造を使用しています:

application/
    modules/
        agenda/
            controllers/
                CalendarController.php
            models/
            services/
                CalendarService.php
            views/
                filters/
                helpers/
                scripts/
                calendar/
                    view-calendar.php
    module2/
    module3/

これを application.ini で次のようにルーティングします。

resources.router.routes.agenda.route = /apps/agenda/
resources.router.routes.agenda.defaults.module = agenda
resources.router.routes.agenda.defaults.controller = calendar
resources.router.routes.agenda.defaults.action = view

ブラウザをポイントすると、次のメッセージが表示されました。

Message: Invalid controller class ("Agenda_CalendarController") 

Agenda_ サフィックスで修正し、ブラウザを更新しました。これを取得しました:

Message: Controller "Agenda_CalendarController" is not an instance of Zend_Controller_Action_Interface

そこで、「zend_Controller_Action を拡張」でインスタンス化しました。これを取得しました: :-)

Fatal error: Class 'Service_Calendar' not found in /home/[PATH TO MY APP FOLDER]/application/modules/agenda/controllers/CalendarController.php on line 30

何が問題なのかわかりません。誰かが私にヒントを1つか2つ持っています:-)

注: それが何かを意味するかどうかはわかりませんが、私は NetBeans を使用しており、コントローラー クラスのサービスのクラス メソッドにカーソルを合わせて CTRL を押すと、関連するポップアップ情報は正しいです。

解決策: ありがとう、あなたは私にさらに進む道を与えてくれました。モジュールのブートストラップが正しく設定されていませんでした。あなたのヒントで、Bob Allen からのこの投稿を見つけました。彼は同じ問題について説明しています。

あなたが探しているものを知っているとき... :-)

ありがとう、私の問題は修正され、もう少し知っています!

4

1 に答える 1

1

コントローラーの命名規則は、コントローラーの場合のようにファイル名の先頭にタイプを追加する必要がないという意味で、モデル/サービス/ビューなどで同じではありません。それらは、基本的な自動ロードの名前からパスへのスキーマに従う必要があります。

したがって、サービスの宣言は次のようになります。これは次のようAgenda_Service_CalendarServiceにマップされるためです(フォルダから単数へmodules/agenda/services/CalendarService.phpの語尾変化に注意してください。これはZFが機能しており、モデルでも発生します)。services_Service_

また、モジュールが適切に初期化されていることを確認してください(独自のBootstrap.phpファイルがあり、application.iniで設定されています)。

PS:NetBeansは、ファイルをスキャンして宣言を確認したため、クラスがどこにあるかを認識しています。そのクラスを論理的に含めることはできません。

于 2011-12-09T06:57:40.683 に答える