0

これが私の問題です。JSON タスクにデータを送信するフォームがあります。ただし、何をしてもタスクは実行されません。次のエラーが表示されます。

Invalid controller: name='controls', format='json'

私が見る限り、コントローラーの実行を妨げるものは何もありません。これがコードです。

class HelloWorldControllerControls extends JController{
    /*function __construct(){
        parent::__construct();
    }*/
    public function postal(){
        JFactory::getDocument()->setMimeEncoding( 'application/json' );
        JResponse::setHeader('Content-Disposition','attachment;filename="status.json"');
        //$postal = JRequest::getVar('postal_code',false);
        //$dispatcher = JDispatcher::getInstance();
        //$saveLocalCookie = $dispatcher->trigger('onSavePostalCode', array('code'=>$postal));
        echo json_encode(array('success'=>true));
        jexit();
    }
}

これはもちろんサイトcontrollersフォルダーにあり、名前が付けられていますcontrols.json.php

これを、ほぼ同じことを行う管理パネルで使用している別のコントローラーと一致させましたが、サイトではなく管理で機能します。

これを呼び出すために使用している JRoute は次のとおりです。

index.php?option=com_helloworld&task=controls.postal&format=json

私が見落としているものはありますか?

編集:

明確にするために、タスクを直接呼び出す必要があります。JSON 形式で生データを出力するだけなので、ビューは必要なく、モデルとコントローラーのみが必要です。現在、私はまだテスト中であるため、モデルはまだ必要ありません。

編集2:

回答の一部が見つかりましたが、この回答はそれほど素晴らしいものではないため、開いたままにします。Joomlaが「サイト」部分でMVCを設定する方法に基づいて(私のテストに基づいて)不可能です。常に最初にビューを探し、次にコントローラーを探します。ビューが設定されていることを確認することによってのみ、タスクを起動できました。MVC を正しく構築していないオープン ソース フレームワークは非論理的であるように思われるため、私が間違っていたり、テストから誤解されたりする可能性があります。

したがって、これを修正するには、「ビュー」を「コントローラー」として使用する必要があります。

4

2 に答える 2

0

新しい mvc または古い mvc を使用するかどうかを決定する必要があります。新しいものは REST にとってはるかに優れています。

JControllerLegacy ではなく JController を拡張する場合は、新しい MVC を使用しています。RESTルーティングとそれに付随するものを使用する必要があります。

新しい MVC では、コントローラーの設計ごとに 1 つのタスクがあります。たとえば、表示 (取得)、作成 (投稿)、更新、削除などです。追加のものが必要になる場合があります。

Postal は動詞ではないため、タスクとして意味がありません。

于 2013-08-02T19:42:10.560 に答える
0

コントローラのファイル名はcontrols.php

また

出力が生の場合は、名前を付けて最後controls.raw.phpに追加&format=rawします。

于 2013-08-01T20:12:38.983 に答える