質問: コンポーネントのリダイレクトの制御(jcontrollerformを使用) joomla 3.3(contact payと呼ばれる)で簡単な連絡先コンポーネントを作成しています。関連するモデルとコントローラーを使用して、バックエンドに「メッセージ」ビューと「メッセージ」ビューを作成しました。 'message'はjformフォームで、 'messages'はリストビューです。すべてが正常に機能します。ただし、フロントエンドには、サイトの訪問者がメッセージを送信するためのメッセージビューしかありません。フロントエンドで同じバックエンドモデルを使用して、$controller->addmodelpath( jpath_administrator.ds.'components'.ds.'com_contactpay'.ds.'models' ); コンポーネントエントリファイル内。私は単にバックエンドからフォームxmlファイル(message.xml)をコピーし、いくつかのフィールドを削除して、それをフロントエンドに使用しました。次のレイアウトファイルでフォームを出力します。<form action="<?php echo jroute::_( 'index.php?option=com_contactpay&task=message.save'); ?>" method="post" id="contactpay-message-form" class="form-validate form-horizontal" enctype="multipart/form-data"> <fieldset> <?php foreach( $this->form->getfieldset('message_fields') as $field ) : ?> <div class="control-group"> <div class="control-label"> <?php echo $field->label; ?> </div> <div class="controls"> <?php echo $field->input; ?> </div> </div> <?php endforeach; ?> </fieldset> <div class="form-actions"> <button type="submit" class="btn btn-primary validate"><?php echo jtext::_('jsubmit');?></button> <a class="btn" href="<?php echo jroute::_('');?>" title="<?php echo jtext::_('jcancel');?>"><?php echo jtext::_('jcancel');?></a> <input type="hidden" name="option" value="com_contactpay" /> <input type="hidden" name="task" value="message.save" /> <?php echo jhtml::_('form.token');?> </div> </form> 使用がフロントエンドのフォームに記入すると、本来の形でデータベースに保存されます。問題問題は、フォームが送信された後、フロントエンドに存在しない「メッセージ」ビューにリダイレクトされるため、次のエラーが発生することです。500 view not found [name, type, prefix]: messages, html, contactpayview コンストラクターで次のコードを使用して、jcontrollerformを拡張するメッセージコントローラーでリダイレクトを制御してみました。$this->setredirect( jroute::_( 'index.php?option=com_contactpay&view=message' )); ただし、これは同じ結果になります。コンポーネントのリダイレクトをどのように制御しますか?
回答: jcontrollerformで$view_list変数を宣言して、優先するビュー名と同じにしてください(通常はビューフォルダー)protected $view_list = 'message'; そして、david fritschが示唆するように同等の関数を明確に宣言しない限り、すべてのフォームイベントはそれにリダイレクトされます。最良のソリューションが最も簡単です!:)