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()app.php、エラーが発生します。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)で、次のことを行う必要があります。

  • コントローラプロバイダーの使用を宣言します。
  • Applicationオブジェクトの作成後、名前空間を登録する必要があります。
  • コントローラプロバイダーをマウントします。

例(Example \ Controllersは名前空間、XyzControllerProviderはコントローラープロバイダー、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 に答える