如何为我的行动

时间:2018-03-23 16:59:56

标签: typo3 extbase typo3-7.6.x

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参与行动?

1 个答案:

答案 0 :(得分:1)

在TYPO3调用中,Extbase操作在路由和调度组件中完成 - 要从外部传递与数字uid值不同的任何内容,必须实现自定义属性TypeConverter才能进行转换将特定字符串模式转换为类型Event的值域对象。

但是,使用配置有一种更简单的方法:

1)在TypoScript中提供配置

Extbase使用基于扩展名称和可选插件名称的强命名约定。因此,可以使用tx_myextensiontx_myextension_someplugin - 后者更适用于somePlugin。此外,settings会自动转发并在Extbase控制器上下文中提供 - 可由$this->settings访问。

plugin.tx_xyz {
  settings {
    newActionEventIdentifier = DD8B2164290B40DA240D843095A29904
  }
}

2)通过存储库

检索数据 \ XYZ \某某\域\库\ EventRepository

使用专用的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();
    }
}

3)将所有内容放在相应的控制器中

$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(...);
}