Silex,加载自己的类

lil*_*lly 4 php autoload silex

我玩Silex,PHP微框架.目前我尝试加载自己的课程,但我没有运气.也许有人可以向我解释一下Silex中的加载是如何工作的?

我的项目结构如下所示:

app/
vendor/
web/
tests/
bootstrap.php
composer.json
composer.lock
Run Code Online (Sandbox Code Playgroud)

比方说,我想加载类Controller\User (namespace here)/app/MainController.php.

我怎样才能做到这一点?我浏览了一些文章(通过Composer或Symfony的UniversalClassLoader加载),遵循一些说明,但它仍然不起作用.

如果有人能帮我一把,我会很感激的.

Fat*_*705 12

我假设您在bootstrap.php中加载Silex类,如下所示:

// bootstrap.php
require_once __DIR__.'/vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)

如果是,请用以下代码替换此代码:

// bootstrap.php
$loader = require __DIR__.'/vendor/autoload.php';
$loader->add(YOUR_NAMESPACE, DIRECTORY_OF_THE_NAMESPACE);
Run Code Online (Sandbox Code Playgroud)

例:

// bootstrap.php
$loader = require __DIR__.'/vendor/autoload.php';
$loader->add('Tutorial', __DIR__.'/src');
Run Code Online (Sandbox Code Playgroud)

如果愿意,可以添加多个名称空间,只需为每个名称空间调用add方法即可.
src/您将存储类文件.对于每个命名空间,创建一个包含此命名空间的类文件的文件夹.该文件应与该类具有相同的名称.

myNameSpace对象\ MyClass的=>的src/myNameSpace对象/ MyClass.php
myNameSpace对象\子名字空间\子类=>的src/myNameSpace对象/子名字空间/ SubClass.php

在每个类文件中,您必须在第一行中设置关联的命名空间.

// src/Tutorial/DemoController.php
namespace Tutorial;
class DemoController{
// class definition goes here..
}
Run Code Online (Sandbox Code Playgroud)

您现在可以在包含bootstrap.php的每个文件中访问您的类.
在/app/MainController.php中,您现在可以像这样访问自己的类:

// app/MainController.php
use Tutorial\DemoController;
$foo = new DemoController();
Run Code Online (Sandbox Code Playgroud)

这个解决方案对我有用.希望对你有效.