/ / Erstellen neuer Dienstanbieter in Silex - PHP, Namespaces, Autoload, Silex

Erstellen neuer Dienstanbieter in Silex - PHP, Namespaces, Autoload, Silex

Ich benutze Silex jetzt schon eine Weile ohneProbleme. Ich bin in der Lage gewesen, neue Dienste hinzuzufügen, grundlegende Websites zu erstellen usw. Leider bin ich jetzt bei der Erstellung eines neuen Dienstes von Grund auf fest ... Ich bin mir nicht sicher, was ich falsch mache, und ich fand einen Anstoß darin Die richtige Richtung wäre gerade jetzt sinnvoll.

Ich habe eine grundlegende Struktur wie folgt:

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

Also, in app.php:

use SilexExtensionCompanyPostbackServiceProvider;

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

im 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"
));

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

namespace SilexExtension;

use SilexApplication;
use SilexServiceProviderInterface;

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

Ich habe mehrere Variationen davon ausprobiert, aberAufrufen von Postback von controller.php führt dazu, dass keine Klassen gefunden werden, und das Deklarieren der Klassenmethoden von CompanyPostbackServiceProvider führt nur zu der zu SilexApplication gehörenden Registerfunktion.

Irgendwelche Ideen? Ich weiß, dass ich etwas Dummes mache, aber aus irgendeinem Grund klopft es nicht.

Vielen Dank!

Antworten:

5 für die Antwort № 1

Erstens registrieren Sie den Company-Namespace doppelt. Dies kann Fehler verursachen. Dies ist jedoch besser - entfernen Sie die Redundanz sowieso.

Zweitens ist das Editieren keine gute Praxisalles unter Anbietern, wie Sie unter Silex-Extensions eine neue Klasse hinzugefügt haben. Normalerweise stelle ich meine App-bezogenen Dinge in / app (bootstrap.php, config.php, appname.php) und Klassen, Provider in / src. In diesem Fall geht Ihr Provider rein /src/Company/Provider/FooProvider.php.

Drittens muss Ihr Provider nur registrierenAutoload - Sie können dies in Ihrem Bootstrap tun, kein Grund, einen Provider zu erstellen. Dies ist erforderlich, wenn Sie einen Service erstellen. Dies bedeutet, dass Sie eine Klasse instanziieren und sie einem Index in zuweisen $app (Sehen Sie so ziemlich jeden Provider, der mit Silex geliefert wird).

Und zuletzt erwähnt Ihre Frage, dass Sie versuchen, Postback in controller.php zu verwenden, aber das reicht nicht aus use Aussage dafür?