extbase操作始终显示错误的流体模板

时间:2017-01-23 10:27:49

标签: typo3 typo3-7.6.x tx-news

我在tx_news上做了几次扩展:

1)我已经为newscontroller添加了三个新动作。前两个动作按预期工作。动作eventDetail显示一个表单。流体代码是

<f:form class="form-horizontal" noCacheHash="true" pageUid="30" action="createApplication" name="newApplication" object="{newApplication}" arguments="{news : newsItem, currentPage: 0, application: newApplication}" enctype="multipart/form-data">
            <f:form.textfield class="form-control" property="name" size="40" required="required" />
            <f:form.hidden name="newsItem" value="{newsItem}" />
            <f:form.submit class="btn btn-primary" value="{f:translate(key:'submitApplyJob')}submit" />
        </f:form>

动作createApplication:

 /**
 * action createApplication
 *
 * @param \FalkRoeder\DatedNews\Domain\Model\Application $newApplication
 * @param \GeorgRinger\News\Domain\Model\News $news news item
 * @return void
 */
public function createApplicationAction(\GeorgRinger\News\Domain\Model\News $news, $currentPage = 1, \FalkRoeder\DatedNews\Domain\Model\Application $newApplication) {

    if (is_null($news)) {
        $previewNewsId = ((int)$this->settings['singleNews'] > 0) ? $this->settings['singleNews'] : 0;
        if ($this->request->hasArgument('news_preview')) {
            $previewNewsId = (int)$this->request->getArgument('news_preview');
        }

        if ($previewNewsId > 0) {
            if ($this->isPreviewOfHiddenRecordsEnabled()) {
                $GLOBALS['TSFE']->showHiddenRecords = true;
                $news = $this->newsRepository->findByUid($previewNewsId, false);
            } else {
                $news = $this->newsRepository->findByUid($previewNewsId);
            }
        }
    }

    if (is_a($news,
            'GeorgRinger\\News\\Domain\\Model\\News') && $this->settings['detail']['checkPidOfNewsRecord']
    ) {
        $news = $this->checkPidOfNewsRecord($news);
    }

    if (is_null($news) && isset($this->settings['detail']['errorHandling'])) {
        $this->handleNoNewsFoundError($this->settings['detail']['errorHandling']);
    }

    $newApplication->setTitle($newsItem->getTitle()." - ".$newApplication->getName() . ', ' . $newApplication->getSurname());

    $this->applicationRepository->add($newApplication);
    $persistenceManager = GeneralUtility::makeInstance("TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager");
    $persistenceManager->persistAll();

    $newsItem->addApplication($newApplication);
    $this->newsRepository->update($newsItem);

    $demand = $this->createDemandObjectFromSettings($this->settings);
    $demand->setActionAndClass(__METHOD__, __CLASS__);

    $assignedValues = [
        'newsItem' => $news,
        'currentPage' => (int)$currentPage,
        'demand' => $demand,
        'newApplication' => $newApplication
    ];

    $assignedValues = $this->emitActionSignal('NewsController', self::SIGNAL_NEWS_CREATEAPPLICATION_ACTION, $assignedValues);
    $this->view->assignMultiple($assignedValues);


}

问题是,在提交表单后,它显示带有pid 30的正确页面,但它显示了action eventDetail的流体模板的内容。应用程序数据不存储在DB中。

第二个奇怪的是,如果我从表单中删除参数currentPage,我会得到一个错误,该参数缺失,因为它是动作定义所需要的。这告诉我要求正确的行动。

我不明白这个问题。只想执行操作并显示名为CreateApplication.html的流体模板。

如果需要更多信息,我会补充一下。

更新 如果我为我的操作添加了一个初始化方法,它将被调用并且参数被正确调试:

public function initializeCreateApplicationAction(){
    \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this->request->getArguments(),'NewsController:139');

}

但是它仍然会切换到错误的流体模板。

2 个答案:

答案 0 :(得分:0)

我要做的第一件事就是将@params的顺序与方法参数的顺序相匹配。

在Fluid中的arguments = {}中提供的参数命名之间存在不匹配,例如application vs. newApplication

答案 1 :(得分:0)

wong重定向是验证错误的结果。在我的应用程序模型中,我设置了另外两个带有验证的字段&#34; notEmpty&#34;但没有发送表格。将这两个字段添加到表单并为其赋值可以得到正确的结果。

进一步说明:

如果域模型对象的验证失败,则类&#34; \ TYPO3 \ CMS \ Extbase \ Mvc \ Controller \ ActionController&#34;的错误操作被调用,这转发给引用请求。