HY, 我试图用一个固定的Uid(由TS配置)调用我的动作,所以我可以在我的页面上放一个插件来注册一个特定的事件。并且不必通过事件列表单击事件单击注册。
我尝试了以下无法解决的问题:
public function newAction(
\XYZ\xyz\Domain\Model\Registration $newRegistration = NULL,
\XYZ\xyz\Domain\Model\Event $event = 'DD8B2164290B40DA240D843095A29904'
)
下一个也没有工作!
public function newAction(
\XYZ\xyz\Domain\Model\Registration $newRegistration = NULL,
\XYZ\xyz\Domain\Model\Event $event = Null
) {
$myinstance = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
'XYZ\\xyz\\Domain\\Model\\Event'
);
$event = $myinstance->findByUid('DD8B2164290B40DA240D843095A29904');
.......
}
所以我想知道有没有办法让我的固定Uid参与行动?
答案 0 :(得分:1)
在TYPO3调用中,Extbase操作在路由和调度组件中完成 - 要从外部传递与数字uid
值不同的任何内容,必须实现自定义属性TypeConverter
才能进行转换将特定字符串模式转换为类型Event
的值域对象。
但是,使用配置有一种更简单的方法:
Extbase使用基于扩展名称和可选插件名称的强命名约定。因此,可以使用tx_myextension
或tx_myextension_someplugin
- 后者更适用于somePlugin
。此外,settings
会自动转发并在Extbase控制器上下文中提供 - 可由$this->settings
访问。
plugin.tx_xyz {
settings {
newActionEventIdentifier = DD8B2164290B40DA240D843095A29904
}
}
使用专用的EventRepository::findByIdentifier(string)
方法检索数据。属性名称只是假设,因为没有明确的提及事件数据是如何持久保存的,以及它是否在关系DBMS中持久存在。
<?php
namespace XYZ\xyz\Domain\Repository;
class EventRepository
{
public function findByIdentifier($identifier)
{
$query = $this->createQuery();
$query->matching(
$query->equals('event_id', $identifier)
);
return $query->execute();
}
}
$event
属性已从操作中删除,因为该实体已预先定义且无法从外部提交(并支持字符串Event
实体转换自定义TypeConverter
如前所述,将需要。)
public function newAction(
\XYZ\xyz\Domain\Model\Registration $newRegistration = null
) {
$event = $this->eventRepository->findByIdentifier(
$this->settings['newActionEventIdentifier']
);
if ($event === null) {
throw new \RuntimeException('No event found', 1522070079);
}
// the regular controller tasks
$this->view->assign(...);
}