Php Silex ActiveRecord模型加载
我尝试使用,但在自动加载模型时出现了一些奇怪的情况:Php Silex ActiveRecord模型加载,php,activerecord,namespaces,autoload,silex,Php,Activerecord,Namespaces,Autoload,Silex,我尝试使用,但在自动加载模型时出现了一些奇怪的情况: // index.php <?php require_once __DIR__.'/../vendor/autoload.php'; $app = new Silex\Application(); ActiveRecord\Config::initialize(function ($cfg) { $cfg->set_model_directory(__DIR__.'/../model'); // ... }); $a
// index.php
<?php require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
ActiveRecord\Config::initialize(function ($cfg) {
$cfg->set_model_directory(__DIR__.'/../model');
// ...
});
$app->get('/', function () {
$page = App\Model\Page::all();
// return ...;
});
// ../model/Page.php
<?php namespace App\Model;
class Page extends \ActiveRecord\Model {
}
它又起作用了
名称空间有什么问题?在您提供的model目录上方的代码中,使用小写字符编写,并且在使用类时使用
App\model\Page
。将目录从模型更改为模型。您还应该检查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"
}
}
}
也不要忘记在编辑项目设置后更新composer谢谢!将自动加载添加到
composer.json
有帮助。但是为什么我要手动定义名称空间呢?当包含带有require
的文件时,他们不应该自动定义吗?是的,他们应该这样做。在您的示例中(或者至少从发布的部分),您实际上没有包含您的文件。要包含它,您应该有类似“require_once”/../model/Page.php”的内容。将其包含在composer中只会为您做到这一点,因此我强烈建议您使用此方法。它将自动加载指定文件夹中的所有类,因此您不必担心添加新类。否则,您必须手动添加您创建的每个新PHP文件。好吧,我实际上是包括需要的文件…谢谢您的帮助!
{
"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"
}
}
}