You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 v13 + DDEV环境下数据库连接及数据操作问题求助

TYPO3 v13 + DDEV 数据库配置及增删改查实现指南

一、数据库连接配置

TYPO3 v13的配置逻辑与旧版本差异较大,结合DDEV默认环境按以下步骤操作:

  1. 确认DDEV数据库环境变量
    DDEV会自动为项目注入数据库相关环境变量,检查项目根目录的.env.local文件,应包含:
TYPO3_DB_HOST=db
TYPO3_DB_USER=db
TYPO3_DB_PASSWORD=db
TYPO3_DB_DATABASE=db
TYPO3_DB_PORT=3306

若不存在,手动创建.env文件并写入上述内容。

  1. 配置TYPO3数据库连接
    编辑config/system/settings.php,添加或修改数据库连接配置:
return [
    'DB' => [
        'Connections' => [
            'Default' => [
                'charset' => 'utf8mb4',
                'dbname' => getenv('TYPO3_DB_DATABASE') ?: 'db',
                'driver' => 'mysqli',
                'host' => getenv('TYPO3_DB_HOST') ?: 'db',
                'password' => getenv('TYPO3_DB_PASSWORD') ?: 'db',
                'port' => (int)getenv('TYPO3_DB_PORT') ?: 3306,
                'user' => getenv('TYPO3_DB_USER') ?: 'db',
            ],
        ],
    ],
];
  1. 解决install.php无配置选项问题
    若已完成基础安装,install.php不会再显示数据库配置步骤。全新项目需先执行ddev exec composer install,再访问/install.php,安装流程会自动读取DDEV的数据库变量,无需手动输入。

二、数据库增删改查实现

TYPO3 v13推荐使用Doctrine DBAL或Extbase Repository实现数据库操作,以下两种方式任选:

方式1:快速实现(使用ConnectionPool)

直接调用核心API执行SQL操作,适合简单场景:

use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;

// 获取默认数据库连接
$connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionByName('Default');
$queryBuilder = $connection->createQueryBuilder();

// 查询单条数据
$record = $queryBuilder
    ->select('*')
    ->from('your_table')
    ->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)))
    ->executeQuery()
    ->fetchAssociative();

// 插入数据
$connection->insert(
    'your_table',
    ['title' => 'New Entry', 'crdate' => time()],
    [\PDO::PARAM_STR, \PDO::PARAM_INT]
);
$newUid = $connection->lastInsertId();

// 更新数据
$connection->update(
    'your_table',
    ['title' => 'Updated Entry'],
    ['uid' => $newUid],
    [\PDO::PARAM_STR, \PDO::PARAM_INT]
);

// 删除数据
$connection->delete(
    'your_table',
    ['uid' => $newUid],
    [\PDO::PARAM_INT]
);

方式2:规范实现(使用Extbase Repository)

适合开发正式扩展,遵循TYPO3最佳实践:

  1. 创建扩展
    执行ddev exec typo3 extension:create生成扩展(如my_extension),按提示填写信息。

  2. 定义模型类
    在Classes/Domain/Model/News.php中定义数据结构:

namespace Vendor\MyExtension\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;

class News extends AbstractEntity {
    protected string $title = '';
    protected string $content = '';

    public function getTitle(): string { return $this->title; }
    public function setTitle(string $title): void { $this->title = $title; }
    public function getContent(): string { return $this->content; }
    public function setContent(string $content): void { $this->content = $content; }
}
  1. 创建Repository
    在Classes/Domain/Repository/NewsRepository.php中定义数据操作方法:
namespace Vendor\MyExtension\Domain\Repository;
use TYPO3\CMS\Extbase\Persistence\Repository;

class NewsRepository extends Repository {
    public function findByTitle(string $title): array {
        $query = $this->createQuery();
        $query->matching($query->equals('title', $title));
        return $query->execute()->toArray();
    }
}
  1. 编写Controller
    在Classes/Controller/NewsController.php中处理业务逻辑:
namespace Vendor\MyExtension\Controller;
use Vendor\MyExtension\Domain\Repository\NewsRepository;
use Vendor\MyExtension\Domain\Model\News;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;

class NewsController extends ActionController {
    public function __construct(protected NewsRepository $newsRepository) {}

    public function listAction(): void {
        $this->view->assign('newsItems', $this->newsRepository->findAll());
    }

    public function createAction(News $news): void {
        $this->newsRepository->add($news);
        $this->redirect('list');
    }

    public function updateAction(News $news): void {
        $this->newsRepository->update($news);
        $this->redirect('list');
    }

    public function deleteAction(News $news): void {
        $this->newsRepository->remove($news);
        $this->redirect('list');
    }
}
  1. 配置TCA
    在Configuration/TCA/Overrides/tx_myextension_domain_model_news.php中添加后台管理配置:
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_myextension_domain_model_news');

$GLOBALS['TCA']['tx_myextension_domain_model_news'] = [
    'ctrl' => [
        'title' => 'LLL:EXT:my_extension/Resources/Private/Language/locallang_db.xlf:tx_myextension_domain_model_news',
        'label' => 'title',
        'delete' => 'deleted',
        'enablecolumns' => ['disabled' => 'hidden'],
        'iconfile' => 'EXT:my_extension/Resources/Public/Icons/news.svg',
    ],
    'types' => ['1' => ['showitem' => 'title, content, hidden']],
    'columns' => [
        'hidden' => [
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.enabled',
            'config' => ['type' => 'check', 'renderType' => 'checkboxToggle'],
        ],
        'title' => [
            'label' => 'LLL:EXT:my_extension/Resources/Private/Language/locallang_db.xlf:tx_myextension_domain_model_news.title',
            'config' => ['type' => 'input', 'eval' => 'trim,required'],
        ],
        'content' => [
            'label' => 'LLL:EXT:my_extension/Resources/Private/Language/locallang_db.xlf:tx_myextension_domain_model_news.content',
            'config' => ['type' => 'text', 'rows' => 15],
        ],
    ],
];

三、页面展示数据

  1. 创建Fluid模板
    在Resources/Private/Templates/News/List.html中编写展示模板:
<h1>News List</h1>
<ul>
    <f:for each="{newsItems}" as="news">
        <li>
            <h2>{news.title}</h2>
            <p>{news.content}</p>
            <f:link.action action="edit" arguments="{news: news}">Edit</f:link.action>
            <f:link.action action="delete" arguments="{news: news}" confirmation="Are you sure?">Delete</f:link.action>
        </li>
    </f:for>
</ul>
<f:link.action action="new">Add News</f:link.action>
  1. 配置前台插件
    在TYPO3后台创建页面,添加「插件」内容元素,选择my_extension的「News List」插件,保存后访问页面即可看到数据列表。

内容的提问来源于stack exchange,提问作者bwfront

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:00:20