TYPO3:如何将Extbase与外部数据库一起使用

时间:2017-01-05 15:09:48

标签: typo3 extbase

extbase扩展应从外部非typo3数据库中选择数据并在TYPO3前端显示。未计划更新数据或插入新数据。不允许将外部数据存储在本地TYPO3系统中。数据是关系型的,外部数据库在物理上位于外部服务器上。

到目前为止,使用了一个pibase扩展名。现在,函数将被extbase扩展名替换。

如何使用extbase访问外部数据库?

3 个答案:

答案 0 :(得分:0)

看看dbal。将您的外部数据库映射为dbal handlermap所需的表格。然后使用extbase和map表格对象。

答案 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' => '',
            ],
        ],
    ],

[...]