
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
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() 就永远走不到底。