2012-01-24 6 views
2

Я использую Silex какое-то время без каких-либо проблем. Я смог добавить новые сервисы, создать базовые сайты и т. Д. К сожалению, я застрял сейчас над созданием новой службы с нуля ... Я не слишком уверен, что я делаю неправильно, и я понял, правильное направление будет полезно сейчас.Создание новых поставщиков услуг в Silex

У меня есть базовая структура, как это:

cache 
resources 
src 
    -app.php 
    -autoload.php 
    -config.php 
    -controllers.php 
    -etc 
vendor 
    -assetic 
    -Company 
    -src 
     -Postback.php <-- The classes I need to load 
    -silex 
    -etc 
views 
web 

Так, в app.php:

use SilexExtension\CompanyPostbackServiceProvider; 

$app->register(new CompanyPostbackServiceProvider(), array(
    'company.class_path' => __DIR__ . '/../vendor/Company/src' 
)); 

в src/autoload.php:

$loader->registerNamespaces(array(
    'Symfony'   => array(__DIR__.'/../vendor/silex/vendor', __DIR__.'/../vendor'), 
    'Silex'    => __DIR__.'/../vendor/silex/src', 
    'SilexExtension' => __DIR__.'/../vendor/Silex-extentions/src', 
    'Assetic'   => __DIR__.'/../vendor/assetic/src', 
    'Company'   => __DIR__.'/../vendor/Company/src' 
)); 

в silex/vendor/Silex-extensions/src/SilexExtension/CompanyPostbackServiceProvider.php:

namespace SilexExtension; 

use Silex\Application; 
use Silex\ServiceProviderInterface; 

class CompanyPostbackServiceProvider implements ServiceProviderInterface 
{ 
    public function register(Application $app) 
    { 
     if (isset($app['company.class_path'])) 
     { 
      $app['autoloader']->registerNamespace(
       'Company', $app['company.class_path'] 
      ); 
     } 
    } 
} 

Я пробовал несколько вариантов этого, но вызов Postback from controller.php приводит к тому, что классы не найдены, и объявление методов класса CompanyPostbackServiceProvider приводит только к функции register, принадлежащей Silex \ Application.

Любые идеи? Я знаю, что делаю что-то глупое, но по какой-то причине просто не щелкает.

Спасибо!

ответ

5

Во-первых, вы дважды зарегистрируете пространство имен Компании, которое может привести к ошибкам, возможно, - в любом случае лучше удалить избыточность.

Во-вторых, не рекомендуется редактировать что-либо под продавцами, например, вы добавили новый класс под Silex-Extensions. Обычно я помещаю свои приложения в приложение/app (bootstrap.php, config.php, appname.php) и классы, поставщики в/src. В этом случае вы получаете /src/Company/Provider/FooProvider.php.

В-третьих, все, что ваш провайдер делает, это зарегистрировать автозагрузку - вы можете сделать это в своем бутстрапе просто отлично, без причины создавать провайдера. Это необходимо, если вы создаете услугу - значит, вы проходите процесс создания экземпляра класса и присваиваете его индексу в $app (почти в любом случае поставщик, поставляемый вместе с силекс).

И, наконец, вы задаете вопрос, что пытаетесь использовать Postback в контроллерах.php, но этого недостаточно. Вы добавили для него заявление use?

Смежные вопросы