Joomlaコントローラーからビューにデータを渡す多くの例を見てきました(例here)。しかし、特定のビュー ファイル (view.html.php) に Joomla サブ コントローラーを渡す必要があります。私はそれについて一日中検索しましたが、解決策は見つかりませんでした。誰もこれを行う方法を知っていますか?
1 に答える
Joomla MVC は非常に緩く、いくつかの方法でこの動作を実装できます。これは、Joomla で MVC を実装するための最も標準的なシーケンスだと思います。
- コントローラーは入力を読み取り、関連するパラメーターをセッション変数に設定します
- コントローラーはビューにリダイレクトします
- ビューはモデルをロードします
- モデルはセッションからパラメーターを読み取ります。
しかし、3. でパラメータを処理してモデルに渡すことができます。これは本当にスタイル/好みの問題です。Joomla では、たとえば $this->get('Data') を使用してビューからモデルを呼び出すことができるため、パラメーターを渡す余地はありません。ただし、$model->getData2($param1,$param2) を呼び出すことを選択できます。
基本的な呼び出しは次のとおりです。
JApplication::getUserStateFromRequest()
1回の呼び出しで入力を読み取り、以前に保存されたセッションデータにフォールバックします。
setUserStateを使用してセッションでこの情報を 保持し、 getUserStateをモデルで使用してデータを取得します。
ただし、URL にパラメーターを渡すだけでリダイレクトできます。次に、view.html.php を使用して入力を解析し、メソッドを呼び出す前にモデルの内部状態を設定します ($model->setState)。または、リダイレクトを完全に回避してコントローラーからモデルとビューをロードします (これはより標準的な方法のようです)。 MVC への簡単なアプローチですが、Joomla ではめったに見られません)。
コントローラーからビューを直接呼び出す
$vName = 'yourview';
$vFormat = 'html'; // raw
if ($view = $this->getView($vName, $vFormat)) {
$model = $this->getModel($vName);
$model->setState('filter.type', $type);
$view->setModel($model, true);
// Push document object into the view.
$view->assignRef('document', $document);
$view->display();
}