TYPO3 Extbase: как отправить данные формы на контроллер - PullRequest
0 голосов
/ 05 января 2019

Я не могу загрузить некоторые данные формы 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 и setters.

/**
 * 
 * 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;
    }

}

класс JobdeskformController extends \ 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. Я ввел некоторые данные в контроллере. почему я не вижу введенные данные формы в выходных данных отладки контроллера? Может быть, я не видел что-то важное. спасибо за помощь.

1 Ответ

0 голосов
/ 05 января 2019

Нет атрибута имени в полях ввода:

Ваши поля ввода в html не имеют атрибута "name". В настоящее время они создаются с использованием чистого HTML, вы можете создавать поля с текучими текстовыми полями :

<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!!');
}

Примечание: вы можете использовать сокращенную функцию debug для вывода отладки вместо длинного \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump

Несоответствие типа переменной в модели:

В вашей модели атрибут $refno определяется как string (@var string)

   /**
     * refno
     *
     * @var string
     */
    protected $refno = '';

позже в ваших методах установки и получения он будет определен как 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;
    }

Примечание: вы можете найти этот тип ошибок, добавив базовый вывод ошибки проверки .

<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>
...