2016-07-20 7 views
1

ich vor kurzem Silex v1.3 auf v2 wandern durch drei Linien in der composer.json ÄndernMigrate Silex v1.3 auf v2, ClassNotFoundException

"silex/silex": "~2.0", 
    "silex/web-profiler": "~2.0", 
    "deralex/yaml-config-service-provider": "2.0.x-dev" 

Aber da viel Klasse kann nicht von Silex finden ...

Hier ist meine app.php Datei, richtig alles, was ich in Silex brauchen laden 1.3:

<?php 

use Silex\Application; 
use Silex\Provider\TwigServiceProvider; 
use Silex\Provider\UrlGeneratorServiceProvider; 
use Silex\Provider\ValidatorServiceProvider; 
use Silex\Provider\ServiceControllerServiceProvider; 
use Silex\Provider\HttpFragmentServiceProvider; 
use Silex\Provider\SessionServiceProvider; 
use Silex\Provider\SecurityServiceProvider; 
use Silex\Provider\FormServiceProvider; 
use Manager\ManagerProvider; 

$app = new Application(); 
$app->register(new UrlGeneratorServiceProvider()); 
$app->register(new ValidatorServiceProvider()); 
$app->register(new ServiceControllerServiceProvider()); 
$app->register(new TwigServiceProvider()); 
$app->register(new HttpFragmentServiceProvider()); 
$app->register(new SessionServiceProvider()); 
$app->register(new FormServiceProvider()); 
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'translator.messages' => array(), 
)); 
$app->register(new SecurityServiceProvider(), [ 
    'security.firewalls' => [ 
     'foo'  => [ 'pattern' => '^/foo' ], 
     'default' => [ 
      'pattern' => '^.*$', 
      'anonymous' => true, 
      'form'  => [ 'login_path' => '/login','check_path' => 'connexion' ], 
      'logout' => [ 'logout_path' => '/logout' ], 
      'users'  => $app->share(function() use ($app) { 
       return new Authenticate\UserProvider($app['manager.user']); 
      }), 
     ], 
    ], 
    'security.access_rules' => [ 
     [ '^/.+$','IS_AUTHENTICATED_ANONYMOUSLY' ], 
     [ '^/foo$','' ] 
    ] 
]); 
$app['twig'] = $app->share($app->extend('twig', function ($twig, $app) { 
    // add custom globals, filters, tags, ... 

    return $twig; 
})); 

$app->register(new DerAlex\Silex\YamlConfigServiceProvider(__DIR__ . '/../app/settings.yml')); 
$app->register(new ManagerProvider($app)); 

return $app; 

Erster Fehler:

ClassNotFoundException in app.php line 15: 
Attempted to load class "UrlGeneratorServiceProvider" from namespace "Silex\Provider". 
Did you forget a "use" statement for another namespace? 

Zweiter Fehler:

UndefinedMethodException in app.php line 33: 
Attempted to call an undefined method named "share" of class "Silex\Application". 

Dritter Fehler:

ClassNotFoundException in app.php line 56: 
Attempted to load class "YamlConfigServiceProvider" from namespace "DerAlex\Silex". 
Did you forget a "use" statement for "DerAlex\Pimple\YamlConfigServiceProvider"? 

Vierter Fehler:

ClassNotFoundException in ManagerProvider.php line 12: 
Attempted to load interface "ServiceProviderInterface" from namespace "Silex". 
Did you forget a "use" statement for "Pimple\ServiceProviderInterface"? 

Ich weiß nicht, was geändert werden soll und wie diese zu korrigieren ... Dank für Hilfe

Antwort

3
  1. UrlGeneratorServiceProvider wurde von RoutingServiceProvider

    ersetzt $app->register(new RoutingServiceProvider());

  2. Method share wurde aus Pimple entfernt. Setzen Sie einfach die Funktion, die das Objekt zurückgibt, um ein Objekt zu teilen.

    $app['object'] = function() { return new Object(); }

  3. sein Komponist kann, ist nicht mit Namespace DerAlex\... automatisch zu laden Klassen festgelegt. Versuchen Sie \DerAlex\Silex\YamlConfigServiceProvider zu verwenden.

  4. Fügen Sie die Verwendungsanweisung use Pimple\ServiceProviderInterface hinzu oder verwenden Sie diese Klasse als \Pimple\ServiceProviderInterface.

http://php.net/manual/en/language.namespaces.php

+0

Thans @Max, es ist ok für Punkt 1 & 2, aber für die 3: YamlConfigServiceProvider, ich versuche, ein "DerAlex \ Silex \ YamlConfigServiceProvider verwenden" hinzufügen „, DerAlex \ Pimple verwenden \ YamlConfigServiceProvider; ", es gibt keine Änderung. Die Datei YamlConfigServiceProvider.php befindet sich in Hersteller \ deralex \ yaml-config-service-provider \ src \ DerAlex \ Pimple – Macbernie

+1

, dann entfernen Sie 'denAlex \ Silex \ YamlConfigServiceProvider;', fügen Sie 'denAlex \ Pimple \ YamlConfigServiceProvider; 'und hinzu benutze es als '$ app-> register (new YamlConfigServiceProvider (...' –

+0

OK für den Punkt 3, danke! :) Für die 4: ServiceProviderInterface, füge ich ein "benutze Pimple \ ServiceProviderInterface;" aber das Problem immer noch hier. Die Datei ServiceProviderInterface.php befindet sich nach Hersteller \ pimple \ pimple \ src \ Pimple – Macbernie