1

我正在尝试将PHP ActiveRecordSilex一起使用,但是模型自动加载时发生了一些奇怪的事情:

// 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 {

}

当我打开一个页面时,它说“找不到类 App\Model\Page”。

如果我手动require '../model/Page.php'- 它工作。
如果我从中删除命名空间../model/Page.php并像通常的类一样使用它:

$page = Page::all(); 

它再次起作用。

命名空间有什么问题?

4

1 回答 1

2

在您在上面提供的代码中,您的模型目录是用小写字符编写的,并且当您使用您使用的类时App\Model\Page。将您的目录从model更改为Model。您还应检查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"
        }
    }
}

也不要忘记在编辑项目设置后更新作曲家!

于 2013-09-23T10:55:27.607 回答