TYPO3 Extbase:如何 post 向控制器形成数据
TYPO3 Extbase: how to post form data to controller
我无法将某些 Extbase 表单数据上传到控制器。在控制器中获取空值。这就是我所做的。
ext_localconf.php
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'Webtech.Wttempro2',
'Jobdeskform',
[
'Jobdeskform' => 'createbewerber, formMailBs'
],
// non-cacheable actions
[
'Jobdeskform' => 'createbewerber, formMailBs'
]
);
ext_tables.php
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Webtech.Wttempro2',
'Jobdeskform',
'Jobdesk Form'
);
Jobdeskform/CreateBewerber.html
<f:form action="formMailBs" controller="Jobdeskform" object="{jobdeskform}" objectName="jobdeskform" method="post">
<label>Refno</label><br>
<input type="text" property="refno" required/><br>
<label>Vorname</label><br>
<input type="text" property="vorname" required/><br>
<f:form.button>Submit</f:form.button>
</f:form>
Model/Jobdeskform.php就是这么简单。它只是将成员变量与 getter 和设置器一起使用。
/**
*
* Tempro data for jobdeskform
*
*/
class Jobdeskform extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* refno
*
* @var string
*/
protected $refno = '';
/**
* vorname
*
* @var string
*/
protected $vorname = '';
/**
* Returns the refno
*
* @return int $refno
*/
public function getRefno()
{
return $this->refno;
}
/**
* Sets the refno
*
* @param int $refno
* @return void
*/
public function setRefno($refno)
{
$this->refno = $refno;
}
/**
* @return string
*/
public function getVorname()
{
return $this->vorname;
}
/**
* @param string $vorname
* @return void
*/
public function setVorname($vorname)
{
$this->vorname = $vorname;
}
}
class JobdeskformController 扩展 \TYPO3\CMS\Extbase\Mvc\Controller\ActionController{
/**
* action createBewerber
*
* @return void
*/
public function createbewerberAction()
{
$baseuri = $this->request->getRequestUri();
$parts = parse_url($baseuri);
parse_str($parts['query'], $query);
$this->view->assign('refno', htmlspecialchars($query['refno']));
}
/**
* action formMailBs
*
* @param \Webtech\Wttempro2\Domain\Model\Jobdeskform $jobdeskform
* @return void
*/
public function formMailBsAction(\Webtech\Wttempro2\Domain\Model\Jobdeskform $jobdeskform = NULL)
{
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($jobdeskform, 'FormObject:');
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($jobdeskform->refno, 'Refno:');
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($refno, 'Refno:');
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($vorname, 'Vorname:');
die('DEBUG!!');
}
}
当我调试表单时,我在变量 $jobdeskform 中得到空值。我在控制器中输入了一些数据。为什么我在控制器调试输出中看不到输入的表单数据?也许我没有看到重要的东西。感谢您的帮助。
输入字段中没有名称属性:
您在 html 中的输入字段没有 "name" 属性。它们目前是使用纯 html 创建的,您可以使用 fluid form textfields:
创建字段
<f:form action="formMailBs" controller="Jobdeskform" objectName="jobdeskform" method="post">
<label>Refno</label><br>
<f:form.textfield property="refno" /><br>
<label>Vorname</label><br>
<f:form.textfield property="vorname" /><br>
<f:form.button>Submit</f:form.button>
</f:form>
结果:
<input type="text" name="tx_example_jobdeskform[jobdeskform][refno]">
<input type="text" name="tx_example_jobdeskform[jobdeskform][vorname]">
调试 post 值的任何简单方法是在控制器中输出整个 $_POST 数组。对于您当前的输入字段,没有提交任何值(没有名称属性)。
/**
* action formMailBs
*
* @param \Webtech\Wttempro2\Domain\Model\Jobdeskform $jobdeskform
* @return void
*/
public function formMailBsAction(\Webtech\Wttempro2\Domain\Model\Jobdeskform $jobdeskform = NULL)
{
debug($_POST);
die('DEBUG!!');
}
注意:您可以使用 shorthand 函数 debug 进行调试输出,而不是长 \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump
模型中变量类型不匹配:
在您的模型中,属性 $refno
定义为 string (@var string
)
/**
* refno
*
* @var string
*/
protected $refno = '';
稍后在您的 setter 和 getter 方法中将其定义为 integer:
/**
* Returns the refno
*
* @return int $refno
*/
public function getRefno()
{
return $this->refno;
}
/**
* Sets the refno
*
* @param int $refno
* @return void
*/
public function setRefno($refno)
{
$this->refno = $refno;
}
注意:您可以通过添加基本的 validation error output.
来查找此类错误
<f:form.validationResults>
<f:if condition="{validationResults.flattenedErrors}">
<ul class="errors">
<f:for each="{validationResults.flattenedErrors}" as="errors" key="propertyPath">
<li>{propertyPath}
<ul>
<f:for each="{errors}" as="error">
<li>{error.code}: {error}</li>
</f:for>
</ul>
</li>
</f:for>
</ul>
</f:if>
</f:form.validationResults>
<f:form action="formMailBs" controller="Jobdeskform" objectName="jobdeskform" method="post">
<label>Refno</label><br>
<f:form.textfield property="refno" /><br>
<label>Vorname</label><br>
<f:form.textfield property="vorname" /><br>
<f:form.button>Submit</f:form.button>
</f:form>
我无法将某些 Extbase 表单数据上传到控制器。在控制器中获取空值。这就是我所做的。
ext_localconf.php
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'Webtech.Wttempro2',
'Jobdeskform',
[
'Jobdeskform' => 'createbewerber, formMailBs'
],
// non-cacheable actions
[
'Jobdeskform' => 'createbewerber, formMailBs'
]
);
ext_tables.php
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Webtech.Wttempro2',
'Jobdeskform',
'Jobdesk Form'
);
Jobdeskform/CreateBewerber.html
<f:form action="formMailBs" controller="Jobdeskform" object="{jobdeskform}" objectName="jobdeskform" method="post">
<label>Refno</label><br>
<input type="text" property="refno" required/><br>
<label>Vorname</label><br>
<input type="text" property="vorname" required/><br>
<f:form.button>Submit</f:form.button>
</f:form>
Model/Jobdeskform.php就是这么简单。它只是将成员变量与 getter 和设置器一起使用。
/**
*
* Tempro data for jobdeskform
*
*/
class Jobdeskform extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* refno
*
* @var string
*/
protected $refno = '';
/**
* vorname
*
* @var string
*/
protected $vorname = '';
/**
* Returns the refno
*
* @return int $refno
*/
public function getRefno()
{
return $this->refno;
}
/**
* Sets the refno
*
* @param int $refno
* @return void
*/
public function setRefno($refno)
{
$this->refno = $refno;
}
/**
* @return string
*/
public function getVorname()
{
return $this->vorname;
}
/**
* @param string $vorname
* @return void
*/
public function setVorname($vorname)
{
$this->vorname = $vorname;
}
}
class JobdeskformController 扩展 \TYPO3\CMS\Extbase\Mvc\Controller\ActionController{
/**
* action createBewerber
*
* @return void
*/
public function createbewerberAction()
{
$baseuri = $this->request->getRequestUri();
$parts = parse_url($baseuri);
parse_str($parts['query'], $query);
$this->view->assign('refno', htmlspecialchars($query['refno']));
}
/**
* action formMailBs
*
* @param \Webtech\Wttempro2\Domain\Model\Jobdeskform $jobdeskform
* @return void
*/
public function formMailBsAction(\Webtech\Wttempro2\Domain\Model\Jobdeskform $jobdeskform = NULL)
{
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($jobdeskform, 'FormObject:');
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($jobdeskform->refno, 'Refno:');
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($refno, 'Refno:');
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($vorname, 'Vorname:');
die('DEBUG!!');
}
}
当我调试表单时,我在变量 $jobdeskform 中得到空值。我在控制器中输入了一些数据。为什么我在控制器调试输出中看不到输入的表单数据?也许我没有看到重要的东西。感谢您的帮助。
输入字段中没有名称属性:
您在 html 中的输入字段没有 "name" 属性。它们目前是使用纯 html 创建的,您可以使用 fluid form textfields:
创建字段<f:form action="formMailBs" controller="Jobdeskform" objectName="jobdeskform" method="post">
<label>Refno</label><br>
<f:form.textfield property="refno" /><br>
<label>Vorname</label><br>
<f:form.textfield property="vorname" /><br>
<f:form.button>Submit</f:form.button>
</f:form>
结果:
<input type="text" name="tx_example_jobdeskform[jobdeskform][refno]">
<input type="text" name="tx_example_jobdeskform[jobdeskform][vorname]">
调试 post 值的任何简单方法是在控制器中输出整个 $_POST 数组。对于您当前的输入字段,没有提交任何值(没有名称属性)。
/**
* action formMailBs
*
* @param \Webtech\Wttempro2\Domain\Model\Jobdeskform $jobdeskform
* @return void
*/
public function formMailBsAction(\Webtech\Wttempro2\Domain\Model\Jobdeskform $jobdeskform = NULL)
{
debug($_POST);
die('DEBUG!!');
}
注意:您可以使用 shorthand 函数 debug 进行调试输出,而不是长 \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump
模型中变量类型不匹配:
在您的模型中,属性 $refno
定义为 string (@var string
)
/**
* refno
*
* @var string
*/
protected $refno = '';
稍后在您的 setter 和 getter 方法中将其定义为 integer:
/**
* Returns the refno
*
* @return int $refno
*/
public function getRefno()
{
return $this->refno;
}
/**
* Sets the refno
*
* @param int $refno
* @return void
*/
public function setRefno($refno)
{
$this->refno = $refno;
}
注意:您可以通过添加基本的 validation error output.
来查找此类错误<f:form.validationResults>
<f:if condition="{validationResults.flattenedErrors}">
<ul class="errors">
<f:for each="{validationResults.flattenedErrors}" as="errors" key="propertyPath">
<li>{propertyPath}
<ul>
<f:for each="{errors}" as="error">
<li>{error.code}: {error}</li>
</f:for>
</ul>
</li>
</f:for>
</ul>
</f:if>
</f:form.validationResults>
<f:form action="formMailBs" controller="Jobdeskform" objectName="jobdeskform" method="post">
<label>Refno</label><br>
<f:form.textfield property="refno" /><br>
<label>Vorname</label><br>
<f:form.textfield property="vorname" /><br>
<f:form.button>Submit</f:form.button>
</f:form>