TYPO3:如何将 Extbase 与外部数据库一起使用
TYPO3: How to use Extbase with external database
extbase 扩展应 select 来自外部非 typo3 数据库的数据,并将它们显示在 TYPO3 前端。未计划更新数据或插入新数据。不允许将外部数据存储在本地 TYPO3 系统中。数据是关系型的,外部数据库物理上在外部服务器上。
到目前为止,一个 pibase 扩展用于此。该功能现在应由 extbase 扩展替换。
如何用extbase访问外部数据库?
看看 dbal。将您的外部数据库映射为 dbal handler and map the needed table. And then use extbase and map table 到您的对象。
我用一个辅助实用程序解决了这个问题,它可以向外部服务器发送 SQL SELECT 请求并处理连接。它适用于 PHP 级别的 mysqli 命令。
在存储库 类 中,我构建了 SQL 字符串并调用辅助实用程序来处理连接。结果我 return arrays.
像这样,我可以在我的控制器中使用 FLUID 机制处理任何事情。
工作正常。
虽然 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' => '',
],
],
],
[...]
extbase 扩展应 select 来自外部非 typo3 数据库的数据,并将它们显示在 TYPO3 前端。未计划更新数据或插入新数据。不允许将外部数据存储在本地 TYPO3 系统中。数据是关系型的,外部数据库物理上在外部服务器上。
到目前为止,一个 pibase 扩展用于此。该功能现在应由 extbase 扩展替换。
如何用extbase访问外部数据库?
看看 dbal。将您的外部数据库映射为 dbal handler and map the needed table. And then use extbase and map table 到您的对象。
我用一个辅助实用程序解决了这个问题,它可以向外部服务器发送 SQL SELECT 请求并处理连接。它适用于 PHP 级别的 mysqli 命令。
在存储库 类 中,我构建了 SQL 字符串并调用辅助实用程序来处理连接。结果我 return arrays.
像这样,我可以在我的控制器中使用 FLUID 机制处理任何事情。
工作正常。
虽然 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' => '',
],
],
],
[...]