[英]TYPO3: How to use Extbase with external database
extbase擴展應從外部非typo3數據庫中選擇數據,並將其顯示在TYPO3前端中。 沒有計划更新數據或插入新數據。 不允許將外部數據存儲在本地TYPO3系統中。 數據是關系數據,外部數據庫實際上位於外部服務器上。
到目前為止,為此使用了pibase擴展。 功能現在應由extbase擴展替換。
如何使用extbase訪問外部數據庫?
我使用幫助程序實用程序解決了該問題,該實用程序可以將SQL SELECT請求發送到外部服務器並處理連接。 它可以通過mysqli命令在PHP級別上運行。
在存儲庫類中,我構建SQL字符串並調用helper實用程序來處理連接。 結果,我返回了數組。
這樣,我就可以使用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' => '',
],
],
],
[...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.