Php 使用Silex&x27有什么问题;自动装弹机?
我的申请文件:Php 使用Silex&x27有什么问题;自动装弹机?,php,symfony,autoloader,silex,Php,Symfony,Autoloader,Silex,我的申请文件: <?php // /src/app.php require_once __DIR__ . '/../lib/vendor/Sensio/silex.phar'; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Foo\Bar; $app = new Silex\Application(); $app['autoloader
<?php // /src/app.php
require_once __DIR__ . '/../lib/vendor/Sensio/silex.phar';
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Foo\Bar;
$app = new Silex\Application();
$app['autoloader']->registerNamespace('Foo', __DIR__);
$bar = new Bar();
(...)
<?php /src/Bar.php
namespace Foo;
use Silex\Application;
use Silex\ControllerProviderInterface;
use Silex\ControllerCollection;
use Symfony\Component\HttpFoundation\Response;
class Bar implements ControllerProviderInterface { ... }
如果使用名称空间Foo
必须在Foo
目录中找到此类
每个名称空间部分都是symfony中的一个目录
如果不起作用,则必须向加载程序显示查找此类的位置
在symfony2中,我用于:
use Symfony\Component\ClassLoader\UniversalClassLoader;
$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
// HERE LOCATED FRAMEWORK SPECIFIED PATHS
// app namespaces
'Foo' => __DIR__ . '/../src',
));
在主php文件(index.php)中,必须:
- 声明控制器提供程序的使用李>
- 创建应用程序对象后,必须注册名称空间李>
- 装载控制器提供程序
例如(example\Controllers是名称空间,XyzControllerProvider是控制器提供程序,url是/my/example):
[…]
//声明控制器提供程序的使用
使用Example\Controllers\XyzControllerProvider;
[...]
//创建应用程序对象后,必须注册名称空间;
$app=Application();
$app['autoloader']->registerNamespace('Example','DIR'./src');
[...]
//装载控制器提供程序
$app->mount('/my/example',new example\Controllers\XyzControllerProvider());
控制器提供程序(在src/example/controllers下)将是:
太好了,谢谢。我不知道我的头在哪里?可能是咖啡太多了?请记住Silex仍在开发中,没有任何稳定的版本。因此,这个答案可能不再适用于最近的Silex更改(它现在大量使用Composer)Silex已在本anwser中更新,现在声明:“您试图访问自动加载器服务。自动加载器已从Silex中移除。建议您使用Composer管理依赖项并处理自动加载。有关更多信息,请参阅。“要解决此问题,请将以下内容添加到composer.json:“autoload”:{“psr-0”:{“示例”:“src”}
就自动加载程序而言,我同意。我的帖子和$app['autoloader']->registerNamespace
几个月前有效。
<?php
namespace Example\Controllers;
use Silex\Application;
use Silex\ControllerProviderInterface;
use Silex\ControllerCollection;
class XyzControllerProvider implements ControllerProviderInterface {
public function connect(Application $app) {
$controllers = new ControllerCollection();
$controllers->get('/', function (Application $app) {
return "DONE;"
});
return $controllers;
}
}