TYPO3 Webservice/Rest API 作为 Extbase 扩展的存储库
TYPO3 Webservice/Rest API as Repository for Extbase Extension
我正在开发一个 TYPO3 extbase 扩展来连接到我的具有 REST-API 的外部应用程序。我只想从我的 REST-API 检索数据并将该数据传递给控制器。由于我是 extbase 开发的新手,所以我没有真正找到任何关于 Repository 与 web 服务交互的资源。仅有关与数据库交互的存储库的文档(MySQL、PostgreSQL、..)
我想知道,我应该在哪里放置 cURL 请求函数以连接到 API?在模型中?在存储库中?我的扩展中的控制器如何访问该数据?来自模型还是存储库?
从外部 application/database 检索数据的最佳做法是什么? (从应用程序中检索到的数据是 JSON 格式的)
感谢您的任何建议/帮助!
我们通常做的是创建一个服务(在 Classes/Service
中)并使用它来连接到网络服务并获取数据。如果你想要模型,你也可以在那里创建它们。
不过,现在想想,从技术上讲,它应该是一个Repository。 Repository 从哪里获取数据并不重要。 Extbase 不应该对完全自定义的存储库有任何问题(不扩展任何其他 class)。
让我们采用一个简单的列表 -> 详细视图并使其尽可能简单,以便获得一些结果。然后你可以添加一些助手 类 并通过命名空间等包含它们
ListAction (yourExtension/Classes/Controller/EventController)
/**
* action list
*
* @return void
*/
public function listAction()
{
$events = (some function which gets all the available events and results to a json output)
$decodedEvents = json_decode($events , true);
(in case you need to see what you got back)
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($decodedEvents);
$this->view->assign('events', $decodedEvents);
}
列表HTML (yourExtension/Resources/Private/Templates/Event/List)
<f:for each="{events}" as="event">
<h2>{event.title}</h2>
</for>
现在,如果我没记错的话,每个事件都有一个 uid 或标识它的东西。因此,在同一个模板上,您可以执行以下操作:
<f:for each="{events}" as="event">
<h2>{event.title}</h2>
<f:link.action action="detail" arguments="{eventId: event.uid}">More</f:link.action>
</f:for>
它的作用是生成一个 link,其中 link 带有一个额外参数 eventId
到您的详细操作。
Bedore TYPO3 呈现详细信息页面,它将通过您的详细信息操作获取此特定事件的信息以便显示它们。
DetailAction (yourExtension/Classes/Controller/EventController)
/**
* action detail
*
* @return void
*/
public function detailAction()
{
$args = $this-request->getArguments();
$eventId = $args['eventId'];
$getEvent = (some function that gets a specific id and results to a json output)
$decodedEvent = json_decode($getEvent , true);
(in case you need to see what you got back)
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($decodedEvent );
$this->view->assign('event', $decodedEvent );
}
这是做什么的,它检索我们指定的参数以获取事件的标识符并将其包含在您的 api 请求中以取回事件。然后我们只是将它解码为普通数组,然后将结果发送到 FrontEnd。
详情HTML (yourExtension/Resources/Private/Templates/Event/Detail)
<h2>{event.title}</h2>
这是一个简单的列表 -> TYPO3 的详细过程。您经常会看到 detail 视图与 show 视图基本相同。
您可以将变量替换为虚拟 json 值并进行尝试。我在写这个答案时测试了代码并且它有效。
Classes/Service
至于 Rudy Gnodde 提到的 Classes/Service,您可以将您的库放在那里(假设您已经编写了一些函数,如 getEvent、getAllEvents、getPersons 等),然后在控制器。
use \Vendor\YourExtension\Service\RestApiClass;
/**
* action list
*
* @return void
*/
public function listAction()
{
$events = RestApiClass::getAllEvents();
$decodedEvents = json_decode($events , true);
(in case you need to see what you got back)
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($decodedEvents);
$this->view->assign('events', $decodedEvents);
}
/**
* action detail
*
* @return void
*/
public function detailAction()
{
$args = $this-request->getArguments();
$eventId = $args['eventId'];
$getEvent = RestApiClass::getEvents($eventId);
$decodedEvent = json_decode($getEvent , true);
(in case you need to see what you got back)
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($decodedEvent );
$this->view->assign('event', $decodedEvent );
}
如果您需要更多信息,请随时询问。
此致
我正在开发一个 TYPO3 extbase 扩展来连接到我的具有 REST-API 的外部应用程序。我只想从我的 REST-API 检索数据并将该数据传递给控制器。由于我是 extbase 开发的新手,所以我没有真正找到任何关于 Repository 与 web 服务交互的资源。仅有关与数据库交互的存储库的文档(MySQL、PostgreSQL、..) 我想知道,我应该在哪里放置 cURL 请求函数以连接到 API?在模型中?在存储库中?我的扩展中的控制器如何访问该数据?来自模型还是存储库?
从外部 application/database 检索数据的最佳做法是什么? (从应用程序中检索到的数据是 JSON 格式的) 感谢您的任何建议/帮助!
我们通常做的是创建一个服务(在 Classes/Service
中)并使用它来连接到网络服务并获取数据。如果你想要模型,你也可以在那里创建它们。
不过,现在想想,从技术上讲,它应该是一个Repository。 Repository 从哪里获取数据并不重要。 Extbase 不应该对完全自定义的存储库有任何问题(不扩展任何其他 class)。
让我们采用一个简单的列表 -> 详细视图并使其尽可能简单,以便获得一些结果。然后你可以添加一些助手 类 并通过命名空间等包含它们
ListAction (yourExtension/Classes/Controller/EventController)
/**
* action list
*
* @return void
*/
public function listAction()
{
$events = (some function which gets all the available events and results to a json output)
$decodedEvents = json_decode($events , true);
(in case you need to see what you got back)
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($decodedEvents);
$this->view->assign('events', $decodedEvents);
}
列表HTML (yourExtension/Resources/Private/Templates/Event/List)
<f:for each="{events}" as="event">
<h2>{event.title}</h2>
</for>
现在,如果我没记错的话,每个事件都有一个 uid 或标识它的东西。因此,在同一个模板上,您可以执行以下操作:
<f:for each="{events}" as="event">
<h2>{event.title}</h2>
<f:link.action action="detail" arguments="{eventId: event.uid}">More</f:link.action>
</f:for>
它的作用是生成一个 link,其中 link 带有一个额外参数 eventId
到您的详细操作。
Bedore TYPO3 呈现详细信息页面,它将通过您的详细信息操作获取此特定事件的信息以便显示它们。
DetailAction (yourExtension/Classes/Controller/EventController)
/**
* action detail
*
* @return void
*/
public function detailAction()
{
$args = $this-request->getArguments();
$eventId = $args['eventId'];
$getEvent = (some function that gets a specific id and results to a json output)
$decodedEvent = json_decode($getEvent , true);
(in case you need to see what you got back)
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($decodedEvent );
$this->view->assign('event', $decodedEvent );
}
这是做什么的,它检索我们指定的参数以获取事件的标识符并将其包含在您的 api 请求中以取回事件。然后我们只是将它解码为普通数组,然后将结果发送到 FrontEnd。
详情HTML (yourExtension/Resources/Private/Templates/Event/Detail)
<h2>{event.title}</h2>
这是一个简单的列表 -> TYPO3 的详细过程。您经常会看到 detail 视图与 show 视图基本相同。
您可以将变量替换为虚拟 json 值并进行尝试。我在写这个答案时测试了代码并且它有效。
Classes/Service
至于 Rudy Gnodde 提到的 Classes/Service,您可以将您的库放在那里(假设您已经编写了一些函数,如 getEvent、getAllEvents、getPersons 等),然后在控制器。
use \Vendor\YourExtension\Service\RestApiClass;
/**
* action list
*
* @return void
*/
public function listAction()
{
$events = RestApiClass::getAllEvents();
$decodedEvents = json_decode($events , true);
(in case you need to see what you got back)
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($decodedEvents);
$this->view->assign('events', $decodedEvents);
}
/**
* action detail
*
* @return void
*/
public function detailAction()
{
$args = $this-request->getArguments();
$eventId = $args['eventId'];
$getEvent = RestApiClass::getEvents($eventId);
$decodedEvent = json_decode($getEvent , true);
(in case you need to see what you got back)
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($decodedEvent );
$this->view->assign('event', $decodedEvent );
}
如果您需要更多信息,请随时询问。
此致