別のフォーム(外部フォーム)に投稿する必要があるフォームがあります。 URLとメソッドポストへのアクションを設定した最初のフォームがあります。ただし、JForm
を使用しています。 1番目のフォームで正常に機能し、データベースに保存して編集用に開いています。ただし、新しいフォームで別のページにPOSTするJavaScriptを介した2番目のアクションがあります。
ページの読み込み後、POSTを検査すると、次のように表示されます。
_Headers Post HTML Cache Cookies
Parts multipart/form-data
jform[id] 0
jform[state] 1
jform[created_by] 23
jform[grant_type] A
jform[cycle]
jform[salutation] M
jform[first_name] vrvervtervtgbver
jform[last_name] rtrgver
jform[title] rvert
jform[company_name] trvrvetrb
jform[email_address] [email protected]
_
私の人生では、この投稿データを取得することはできません。 jinput
と_$_POST
_を使用して考えられるすべてのことを試しましたが、何も機能しないようです。 Array(0){[id]=>"" ...
、NULL
、またはARRAY
のいずれかを表示します。データベースを使用することはできません。このアクションでは、ポスト経由で必要になるためです。
誰か提案はありますか?
これが今の私のコードです:
_<?php
/**
* @version 1.2.0
* @package com_sfinnovate
* @copyright Copyright (C) 2014. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @author Matt Dray <[email protected]> - http://www.aespire.com
*/
// no direct access
defined('_JEXEC') or die;
$doc =& JFactory::getDocument();
$doc->addStyleSheet('components/com_sfinnovate/innovatestyle.css');
JHtml::_('behavior.keepalive');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
JHtml::_('formbehavior.chosen', 'select');
//Load admin language file
$lang = JFactory::getLanguage();
$lang->load('com_sfinnovate', JPATH_ADMINISTRATOR);
$doc = JFactory::getDocument();
$doc->addScript(JUri::base() . '/components/com_sfinnovate/assets/js/form.js');
if($this->item->id) {
$canState = JFactory::getUser()->authorise('core.edit.state','com_sfinnovate.innofundapp');
} else {
$canState = JFactory::getUser()->authorise('core.edit.state','com_sfinnovate.innofundapp.'.$this->item->id);
}
$jinput = JFactory::getApplication()->input;
$fooValues = $jinput->get('jform', NULL, NULL);
var_dump($fooValues);
?>
<script type="text/javascript">
getScript('//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', function() {
jQuery(document).ready(function() {
jQuery('#form-innofundapp').submit(function(event) {
});
});
});
</script>
<div class="innofundapp-edit front-end-edit">
<?php if (!empty($this->item->id)): ?>
<h1>Edit <?php echo $this->item->id; ?></h1>
<?php else: ?>
<h1>Add</h1>
<?php endif; ?>
_
Joomlaの標準管理者スタイルを使用してフォームを送信すると、POSTリクエストがサーバーに作成されます。サーバーはフォームのtask
を処理します(これはフォームをデータベースに保存するには、通常「保存」または同様の方法を使用します。
保存の最後に、Joomlaは自動的にフォームビューまたはリストビューにリダイレクトします(これが「保存して閉じる」アクションか「保存」アクションかによって異なります)。このリダイレクトが発生すると、POSTリクエストではなくなりますが、実際にはGETリクエストになります。
結果のページを更新することで、これが発生したことを確認できます。ブラウザからフォームデータの再送信を求められましたか?いいえの場合、投稿と最終的にサーバーから取得した応答の間にリダイレクトがありました。リダイレクトが発生すると、結果のページで$_POST
またはその他のメソッドからデータにアクセスできなくなります。
したがって、結果のフォームに$_POST
の正確なコピーが本当に必要な場合は、保存プロセス中にセッションにプッシュすることをお勧めします。次に、投稿データからではなく、セッションからプルします(存在しないため)。
保存機能で、次のようにします。
$session = JFactory::getSession();
$session->set('post-data', $_POST);
次に、フォームで、次のようにこれを取得できます。
$session = JFactory::getSession();
$post = $session->get('post-data');
// clear the data so we don't process it again
$session->clear('post-data');
デビッドの答えを拡張します。次の手法では、当面の問題のために特別に設計された方法を使用します。解決策は、JApplication::setUserState()
およびJApplication::getUserState()
メソッドを使用することです。次のコードは使用法を示しています
_//In the save function, do this:
JFactory::getApplication()->setUserState('post-data', $_POST, array());
_
_//In the form , do this to retrieve the value:
JFactory::getApplication()->getUserState('post-data');
_
_//do following to clear the value
JFactory::getApplication()->setUserState('post-data', null);
_
JApplication::getUserStateFromRequest()
を使用することもできます。この関数は、要求から値をロードすることを優先し、次にユーザーセッションにも値を保存します。そのため、次にデータをリクエストせずにこの関数を呼び出すと、セッションからデータがロードされます。
https://docs.joomla.org/How_to_use_user_state_variables
誰かのお役に立てば幸いです。