Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Silex&x27有什么问题;自动装弹机?_Php_Symfony_Autoloader_Silex - Fatal编程技术网

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