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)
这个解决方案对我有用.希望对你有效.
| 归档时间: |
|
| 查看次数: |
7847 次 |
| 最近记录: |