我创建了一个可以显示益智游戏的小扩展程序。我制作的可切换控制器动作包括list / show(工作正常),admin(也很好)和仅显示。
仅对于show我想从flexform中选择一个数据库条目,然后由单个视图显示。为此,我在flexform中添加了一个新字段:
<settings.singlePuzzle>
<TCEforms>
<label>Puzzle to show</label>
<config>
<type>select</type>
<foreign_table>tx_wspuzzle_domain_model_puzzle</foreign_table>
<items>
<numIndex index="0" type="array">
<numIndex index="0">-- Choose --</numIndex>
<numIndex index="1"></numIndex>
</numIndex>
</items>
<size>1</size>
<maxitems>1</maxitems>
<minitems>0</minitems>
</config>
</TCEforms>
</settings.singlePuzzle>
到目前为止一切顺利,如果我在这里选择一个项目并在列表视图中调试它,它似乎选择了正确的id。
现在我将控制器中的showAction更改为:
/**
* action show
*
* @param \Websafari\Wspuzzle\Domain\Model\Puzzle $puzzle
* @return void
*/
public function showAction(\Websafari\Wspuzzle\Domain\Model\Puzzle $puzzle = NULL) {
if(is_null($puzzle)) $puzzle = $this->puzzleRepository->findByUid($this->settings['singlePuzzle']);
$this->view->assign('puzzle', $puzzle);
}
现在我将操作更改为&#34;仅显示&#34;,为&#34; singlePuzzle&#34;选择一个条目然后(我认为)我应该很高兴,但我得到的只是以下错误:
Required argument "puzzle" is not set.
显然我犯了一个错误,但我没有得到它。
第一:为什么&#34;拼图&#34;还需要吗?这就是为什么我添加&#34; = NULL&#34;该函数(我也尝试将@ignorevalidation $ puzzle添加到评论中)。
第二:为什么没有设定?当我调试&#34; $ this-&gt;设置[&#39; singlePuzzle&#39;];&#34;我得到一个拼图对象的id。
如果有人可以指出我的错误会很好,因为我真的被困在这里。 Thnx很多!
答案 0 :(得分:1)
问题是类(参数等)的反射信息被缓存在Extbase中。因此,如果您更改定义并且不清除相应的缓存,则仍需要您的参数。
您需要清除TYPO3中的“系统缓存”。有三种方法可以做到:
options.clearCache.system = 1
在生产环境中通过用户TSconfig启用该按钮。您也可以手动清除PhpMyAdmin中所有缓存相关的表
TRUNCATE table cf_cache_hash;
TRUNCATE table cf_cache_hash_tags;
TRUNCATE table cf_cache_pages;
TRUNCATE table cf_cache_pagesection;
TRUNCATE table cf_cache_pagesection_tags;
TRUNCATE table cf_cache_pages_tags;
TRUNCATE table cf_cache_rootline;
TRUNCATE table cf_cache_rootline_tags;
TRUNCATE table cf_extbase_object;
TRUNCATE table cf_extbase_object_tags;
TRUNCATE table cf_extbase_reflection;
TRUNCATE table cf_extbase_reflection_tags;
TRUNCATE cf_extbase_typo3dbbackend_queries;
TRUNCATE cf_extbase_typo3dbbackend_queries_tags;
TRUNCATE cf_extbase_typo3dbbackend_tablecolumns;
TRUNCATE cf_extbase_typo3dbbackend_tablecolumns_tags;
TRUNCATE cf_extbase_datamapfactory_datamap;
TRUNCATE cf_extbase_datamapfactory_datamap_tags;
这也会截断查询缓存等。在某些情况下可能会有用。
清除缓存后,它应该可以正常工作。
顺便说一句,为了安全起见,你应该从FlexForm中对UID进行类型转换: if(is_null($puzzle)) $puzzle = $this->puzzleRepository->findByUid((int)$this->settings['singlePuzzle']);