extbase扩展应从外部非typo3数据库中选择数据并在TYPO3前端显示。未计划更新数据或插入新数据。不允许将外部数据存储在本地TYPO3系统中。数据是关系型的,外部数据库在物理上位于外部服务器上。
到目前为止,使用了一个pibase扩展名。现在,函数将被extbase扩展名替换。
如何使用extbase访问外部数据库?
答案 0 :(得分:0)
答案 1 :(得分:0)
我用一个辅助工具解决了它,它可以将SQL SELECT请求发送到外部服务器并处理连接。它使用mysqli命令在PHP级别上运行。
在存储库类中,我构建SQL字符串并调用帮助程序实用程序来处理连接。结果我返回数组。
像这样,我能够处理控制器和FLUID机制中的任何内容。
工作正常。
答案 2 :(得分:0)
虽然dbal绝对是最干净的方法,但我也使用了一个助手,因为系统中的某些第三方扩展使dbal的使用成为不可能。
您可以将一个全新的数据库连接实例化为一个简单的实用程序。
<?php
namespace FOO\YourExt\Utility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* Database utility
*/
class DatabaseUtility
{
private static $config = 'External';
/**
* Instantiate custom queryBuilder for different database config
*
* @return type
*/
public static function queryBuilder()
{
$cObj = GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer');
$objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$connectionPool = $objectManager->get('TYPO3\\CMS\\Core\\Database\\ConnectionPool');
$externalConnection = $connectionPool->getConnectionByName(self::$config);
$queryBuilder = $externalConnection->createQueryBuilder();
return $queryBuilder;
}
/**
* Instantiate custom connectionPool for different database config
*
* @return type
*/
public static function connectionPool()
{
$cObj = GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer');
$objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$connectionPool = $objectManager->get('TYPO3\\CMS\\Core\\Database\\ConnectionPool');
$externalConnection = $connectionPool->getConnectionByName(self::$config);
return $externalConnection;
}
}
您可以使用LocalConfiguration.php
中定义的任何数据库连接。
[...]
'DB' => [
'Connections' => [
'Default' => [],
'External' => [
'charset' => 'utf8',
'dbname' => 'external_database_name',
'driver' => 'mysqli',
'host' => '',
'password' => '',
'port' => 3306,
'user' => '',
],
],
],
[...]