1

我的申请文件:

<?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 { ... }

当我$bar = new Bar()在 myapp.php中执行 a 时,出现错误:Fatal error: Class 'Moken\Classname' not found in (...)/src/app.php on line 11

谁能告诉我我做错了什么?

4

2 回答 2

3

如果你使用namespace 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',
));
于 2011-11-11T11:50:31.420 回答
0

在您的主 php 文件 (index.php) 中,您必须:

  • 声明使用您的控制器提供程序;
  • 创建您的应用程序对象后,您必须注册您的命名空间;
  • 挂载您的控制器提供程序。

例如(Example\Controllers 是命名空间,XyzControllerProvider 是 Controller Provider,url 是 /my/example):

[...]
// declare the use of your Controller Provider
use Example\Controllers\XyzControllerProvider;
[...]
//after creation of your Application object you must register your namespace;
$app = Application();
$app['autoloader']->registerNamespace('Example', __DIR__.'/src');
[...]
//mount your Controller Provider
$app->mount('/my/example', new Example\Controllers\XyzControllerProvider());

控制器提供程序(在 src/example/controllers 下)将是:

<?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;
  }
}
于 2012-05-08T20:23:35.277 回答