Utworzyłem pakiet zgodny z "Creating a Package" instructions in the Laravel 4 documentation. Po utworzeniu pakietu utworzyłem folder "kontrolery" i plik tras. Nowa struktura plików jest:Uzyskiwanie dostępu do kontrolerów pakietów w Laravel 4
/src
/Vendor
/Package
PackageServiceProvider.php
/config
/controllers
/lang
/migrations
/views
routes.php
/tests
/public
Dodałem plik trasy do części bagażnika usługodawcy pakiet:
public function boot()
{
$this->package('vendor/package');
include __DIR__ . '/../../routes.php';
}
Następnie dodaje podstawową drogę do pliku trasach:
Route::get('/package', function() {
return "Package route test";
});
Odwiedzenie mojej aplikacji na określonej trasie (app.dev/package) zwraca oczekiwaną liczbę:
Package route test
następnie dodanie podstawowego kontrolera wezwanie do trasy (przy użyciu domyślnego kontrolera laravel „HomeController”) działa:
Route::get('/package', '[email protected]');
Potem następuje this SO answer konfigurowania regulatora na opakowaniu. Dodałem folder src/controllers do classmap kompozytora, a potem rzucił autoloadera i sprawdzone vendor/kompozytor/autoload_classmap.php i okazało się, że klasa jest pomyślnie załadowany przez kompozytora:
<?php
// autoload_classmap.php generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'HomeController' => $baseDir . '/src/controllers/HomeController.php',
);
Teraz dodałem nowy kontroler pakietu na trasie z użyciem nazw:
Route::get('/package', 'Vendor\Package\Controllers\[email protected]');
ale to generuje błąd o nie znalezieniu klasa:
ReflectionException: Class Vendor\Package\Controllers\HomeController does not exist
próbowałem również nazywając ją u śpiewać nazwę pakietu:
Route::get('/package', 'Package::[email protected]');
która produkuje ten sam błąd:
ReflectionException: Class Vendor\Package\Controllers\HomeController does not exist
Bez względu na to, co staram pakiet nie może uzyskać dostępu swój własny sterownik, który kompozytor potwierdzeniem jest załadowany (wyświetlając vendor/pakiet/autoload_classmap.php).
Wszelkie pomysły? Nie jestem pewien, czy problem polega na tym, że kompozytor nie ładuje klasy, nie jestem pewien, od czego zacząć od debugowania problemu. Stworzyłem inny pakiet i powtórzyłem kroki tutaj i otrzymałem ten sam problem.
mogę uzyskać dostęp do widoków pakietów zarówno z pakietu i aplikacji, na przykład:
View::make('package::view');
Problem wydaje się być między kompozytora załadowaniu sterownika i laravel mogąc do niego dostęp.
Po prostu gram grę Laravel 4 i napotkałem ten problem. Czy naprawdę potrzebujesz dodać każdą klasę do pliku vendor/composer/autoload_classmap.php? Myślisz, że byłoby w stanie znaleźć te klasy bez tego byś nie zrobił? – neilcrookes
@neilcrookes Z powodów związanych z wydajnością kompozytor generuje płaską mapę klas wszystkich klas, ten plik jest generowany automatycznie i bardzo trudno jest ręcznie go edytować, ale tylko szybki test. Jest generowany przy użyciu informacji z pliku composer.json. Zobacz http://getcomposer.org/doc/04-schema.md#autoload – rich97
+1 Dziękujemy za odpowiedź i odpowiedź na własne pytanie. – rich97