簡體   English   中英

TYPO3:如何將Extbase與外部數據庫一起使用

[英]TYPO3: How to use Extbase with external database

extbase擴展應從外部非typo3數據庫中選擇數據,並將其顯示在TYPO3前端中。 沒有計划更新數據或插入新數據。 不允許將外部數據存儲在本地TYPO3系統中。 數據是關系數據,外部數據庫實際上位於外部服務器上。

到目前為止,為此使用了pibase擴展。 功能現在應由extbase擴展替換。

如何使用extbase訪問外部數據庫?

看看dbal。 將您的外部數據庫映射為dbal 處理程序,映射所需的表。 然后使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM