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"
        }
    }
}