Propel 不能直接使用是因为其核心依赖从 schema.xml 生成的模型类,而 Composer 仅安装运行时库;必须手动创建 schema.xml、配置 propel.yaml 指定路径与数据库、运行 propel:model:build 生成类,并将 outputDir 加入 composer.json autoload 后执行 dump-autoload。

Propel 不再通过 Composer 的 require 直接安装即可开用——它需要额外的生成步骤、XML Schema 定义和构建配置,跳过这些会连 Propel::getConnection() 都报错。
为什么 composer require propel/propel 后不能直接用
Propel 的核心逻辑依赖于从 XML Schema(schema.xml)生成的 PHP 模型类(如 User、Post),这些类不是随包一起发布的,必须本地运行 propel:model:build 生成。Composer 只装了运行时库和命令行工具,没生成任何业务模型。
- 不生成模型 →
new User()会抛Class 'User' not found - 不配置数据库连接 →
Propel::getConnection()报No database connection configured - Schema 文件缺失或路径不对 →
propel:model:build提示schema.xml not found
必须手动创建 schema.xml 并放在正确位置
Propel 默认只在 src/Propel/ 或项目根目录下找 schema.xml;推荐统一放 schema/ 子目录,并通过 propel.yaml 显式声明路径。
- 新建
schema/schema.xml,内容至少包含一个和一个内必须有
id字段且设为primaryKey="true"- 字段类型用 Propel 原生名:如
type="VARCHAR"、type="INTEGER",不用string或int- 别漏掉
xmlns="http://www.propelorm.org/schema"命名空间声明,否则解析失败配置
propel.yaml要指定全部关键路径仅靠默认配置几乎必然失败;必须显式告诉 Propel 哪里读 schema、写模型、存 SQL、连数据库。
-
paths:下必须含schemaDir(如schema/)、outputDir(如src/Model/)、phpDir(同outputDir) -
propel.database设为mysql、pgsql或sqlite,不能留空 -
propel.database.url格式严格:mysql:host=127.0.0.1;dbname=testdb;charset=utf8mb4,sqlite:/var/db/app.db - SQLite 用户注意:
propel.database.url必须是绝对路径,相对路径会被解释成内存数据库
生成模型后要确保自动加载生效
生成的类(如
src/Model/User.php)不会被 Composer 自动发现,除非你把src/Model/加进autoload。- 修改
composer.json的"autoload": {"psr-4": {"App\\Model\\": "src/Model/"}} - 立刻运行
composer dump-autoload,否则new App\Model\User()仍报错 - 生成命令实际输出路径必须与 autoload 路径一致;若
outputDir: "generated-models",autoload 就得对应改 - 开发中频繁改
schema.xml?加--overwrite参数避免手动删旧文件:propel:model:build --overwrite
Propel 的“配置”本质是三件事串起来:schema 文件存在且合法、yaml 里所有路径和 URL 精确无歧义、生成的类能被 autoloader 找到。少一个环节,
Propel::getConnection()就永远走不到底。










