2013-01-19 38 views
5

Ich möchte Controller in meinem Laravel 4-Paket haben, aber ich kann das Routing nicht zum Laufen bringen.Paket-Controller in Laravel 4

Ich habe die Package-Anweisungen in der Laravel 4-Dokumentation befolgt und die routes.php-Datei mit Nicht-Controller-Routen arbeiten lassen.

Könnte jemand mir bitte einige Anweisungen geben, wie man Paket-Controller in Laravel 4 arbeiten, würde es sehr geschätzt werden.

Vielen Dank im Voraus.

Lars

// EDIT: 

// routes.php 

    Route::get('admin', 'Package::[email protected]'); // Does not work 

    Route::get('admin', function(){ // Works fine 
     return 'Dashboard'; 
    }) 
+0

Bitte posten Sie Ihre routes.php Code zeigt, was Sie – Laurence

+0

Sie es versucht haben, gehen :) –

+0

Hey hast du es geschafft, dass das funktioniert? wenn ja. Könntest du eine Antwort mit der Lösung posten? – DonSeba

Antwort

3

Sie werden den Controller verweisen müssen damit Namespace zu

Route::get('/admin', 'PackageNS\Package\Controllers\[email protected]'); 

ist oder sogar

Route::controller('PackageNS\Package\Controllers\AdminController', 'admin'); 
+0

Das hat mir geholfen, aber ich bekomme immer noch einen Fehler, weil der Controller, den ich erstellt habe, den Basis-Controller erweitert, den er nicht mehr finden kann. Ich bekomme 'FatalErrorException: Fehler: Klasse 'PackageNS \ Package \ BaseController' nicht gefunden '. Vermutlich muss ich 'use path \ to \ basiccontroller;' oder etwas ähnliches hinzufügen, aber ich kenne den Pfad zum Basis-Controller nicht.Danke –

+2

@Al_, Sie müssen den vollen namespaced Weg des Kontrollers einschließen, oder verwenden Sie eine 'Gebrauch' Richtlinie, um sie einzuschließen. 'Illuminate \ Routing \ Controller \ Controller' oder' extends \ Illuminate \ Routing \ Controller \ Controller' verwenden –

+0

Danke Kevin –

2

In Ihrem Paket Service-Provider haben Sie enthalten Ihre Routen-Datei? Ich glaube nicht, dass L4 die Routendatei automatisch lädt. Sie können es überall tun, aber ich vermute, dass dies der am besten geeignete Ort wäre, um es zu tun.

public function register() 
{ 
    $this->package('vendor/pkgname'); 
    require __DIR__.'/../routes.php'; 
} 
+0

Danke für die Antwort, aber ich habe meine Routendatei in den Dienstanbieter meines Pakets aufgenommen. Nicht-Controller-Routen funktioniert hier gut. –

-1

Hast du dies tun:

composer dump-autoload 

Der Autoloader muss über diese glänzenden neuen Klassen erzählt werden. Ich schlage auch vor, dass Sie die Webserver-Protokolle auf Fehler überprüfen.

10

Ich kenne die Details Ihrer Situation nicht, noch weiß ich, ob dies der "richtige" Weg ist, um dieses Problem zu beheben, aber da ich auf das gleiche Problem stieß, dachte ich mir, wie ich es lösen würde .

habe ich meinen Paket-Controller in dem Controller-Unterverzeichnis, so dass meine Verzeichnisstruktur wie folgt aussieht:

/src 
    /Vendor 
     /Package 
      PackageServiceProvider.php 
    /config 
    /controllers 
    /lang 
    /migrations 
    /views 
/tests 
/public 

Dann habe ich den Controller Ordner auf mein Paket composer.json automatisch geladen Klasse Karte hinzugefügt.

{ 
    "name": "kevin-s-perrine/my-first-packge", 
    "description": "", 
    "authors": [ 
     { 
      "name": "Kevin S. Perrine", 
      "email": "[email protected]" 
     } 
    ], 
    "require": { 
     "php": ">=5.3.0", 
     "illuminate/support": "4.0.x" 
    }, 
    "autoload": { 
     "classmap": [ 
      "src/migrations", 
      "src/controllers" 
     ], 
     "psr-0": { 
      "KevinSPerrine\\MyFirstPackage": "src/" 
     } 
    }, 
    "minimum-stability": "dev" 
} 

Schließlich lief ich composer dump-autoload in dem Stammverzeichnis des Pakets, und dann den Controller mit Namen in der Routen-Datei verweisen.

Route::get('myfirstpackage', '[email protected]'); 
+0

Ich denke, diese Antwort ist viel besser. – DonSeba