我正在尝试将PHP ActiveRecord与Silex一起使用,但是模型自动加载发生了一些奇怪的事情:
// index.php
<?php require_once __DIR__.'/../vendor/autoload.php';
$app = new SilexApplication();
ActiveRecordConfig::initialize(function ($cfg) {
$cfg->set_model_directory(__DIR__.'/../model');
// ...
});
$app->get('/', function () {
$page = AppModelPage::all();
// return ...;
});
// ../model/Page.php
<?php namespace AppModel;
class Page extends ActiveRecordModel {
}
当我打开一个页面时,它说"找不到类应用程序\模型\页面"。
如果我手动require '../model/Page.php'
- 它可以工作。
如果我从../model/Page.php
中删除命名空间并像往常一样使用它:
$page = Page::all();
它再次起作用。
命名空间有什么问题?
在上面提供的代码中,模型目录是用小写字符编写的,当您使用类时,您使用AppModelPage
.将目录从模型更改为模型。您还应检查您的自定义类是否已通过autoload.php
脚本正确加载。如果不是这种情况,则必须更新 composer.json 文件。下面是一个简单的示例:
{
"require": {
"silex/silex": "~1.0",
"silex/web-profiler": "~1.0",
"monolog/monolog": ">=1.0.0",
"symfony/monolog-bridge": "~2.3",
...
},
"autoload": {
"psr-0": {
"HERE_GOES_YOUR_CUSTOM_NAMESPACE": "DIRECTORY_OF_NAMESPACE"
}
}
}
另外,不要忘记在项目设置版本后更新作曲家!