2011-12-09 19 views
0

私のプロジェクトにthis amazing calendarを統合しようとしています。私はサービスの事に困っている。コントローラクラスでサービスクラスを使用するにはどうすればよいですか?

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") 
この私のapplication.iniでこのよう

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

Iルート:私は、この種の構造を使用しています

私はそれを私のAgenda_サフィックスで修正し、ブラウザをリフレッシュしました。取得:

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

私は "extends 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 

何がうまくいかないのか分かりません。誰かが私のためにヒント2つを持っています:-)

注:私はそれが何かを意味するかどうか分かりませんが、NetBeansを使用し、コントローラクラスのサービスのクラスメソッドをホバーしている間にCtrlキーを押した場合、関連するポップアップ情報が正しい。

解決方法: ありがとうございます、あなたは私にさらに進む道を教えてくれました。私のモジュールのブートストラップは正しく設定されていませんでした。あなたのヒントと私は彼が同じ問題を記述するボブ・アレンからこのポストを見つけました。

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

おかげで、私の問題は、固定されており、私はもう少しを知っています!

+0

'application/modules/agenda/services/CalendarService.php'を' application/services/Calendar.php'に移動し、そのクラスが見つかったかどうか確認してください。アプリケーションの名前空間(Application_Service_Calendarなど)を使用してクラスの名前を変更する必要があります。 – drew010

答えて

1

コントローラーの場合と同じように、コントローラーの名前付け規則は、モデル/サービス/ビューなどでは同じではありません。それらは、基本的なautoloading名前からパスへのスキーマに従わなければなりません。

だから、あなたのための宣言サービスは、次のようになります。Agenda_Service_CalendarService、それはmodules/agenda/services/CalendarService.phpにマップするので(変曲点に注意してください - servicesフォルダから単数_Service_に - それは、ZFの作業だとそれはあまりにも、モデルのために起こります)。

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

PS:クラスを論理的にインクルードするのではなく、ファイルをスキャンして宣言を見たため、NetBeansはクラスの場所を認識します。

関連する問題