2013-01-19 17 views
5

Desidero avere controller nel mio pacchetto Laravel 4, ma non riesco a far funzionare il routing.Controller per pacchetti in Laravel 4

Ho seguito le istruzioni del pacchetto nella documentazione di Laravel 4 e ho ottenuto il file routes.php che funziona con percorsi non controller.

Qualcuno potrebbe darmi alcune istruzioni su come far funzionare i controller dei pacchetti in Laravel 4, sarebbe molto apprezzato.

Grazie in anticipo.

Lars

// EDIT: 

// routes.php 

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

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

Si prega di inviare il vostro codice routes.php mostrando ciò che avete provato – Laurence

+0

Ci si va :) –

+0

Ehi, sei riuscito a farlo funzionare? se è così. potresti pubblicare una risposta con il sollution? – DonSeba

risposta

3

Avrai bisogno di fare riferimento al controller con il suo spazio dei nomi troppo

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

o anche

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

Questo mi ha aiutato, ma continuo a ricevere un errore perché il controller che ho creato estende il controller di base che non è più in grado di trovare. Ottengo 'FatalErrorException: Error: Class 'PackageNS \ Package \ BaseController' non trovato'. Presumibilmente ho bisogno di aggiungere 'use path \ to \ basecontroller;' o qualcosa di simile, ma non conosco il percorso del controller di base.Grazie –

+2

@Al_, dovrai includere il percorso completo dei nomi del controller o utilizzare una direttiva 'use' per includerla. 'usa Illuminate \ Routing \ Controllers \ Controller' o' extends \ Illuminate \ Routing \ Controllers \ Controller' –

+0

Grazie Kevin –

2

In fornitore di servizi del pacchetto, hai inserito il file i percorsi? Non credo che L4 carichi automaticamente il file del percorso. Puoi farlo ovunque ma sospetto che questo sarebbe il posto più appropriato per farlo.

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

Grazie per la risposta, ma ho incluso il mio file di percorso nel fornitore di servizi del mio pacco. Le rotte senza controller funzionano bene qui. –

-1

hai fatto questo:

composer dump-autoload 

Il caricatore automatico ha bisogno di essere raccontato queste nuove classi lucidi. Suggerisco anche di controllare i log del server web per individuare eventuali errori.

10

Non conosco le specifiche della situazione, né so se questo è il modo "corretto" per risolvere questo problema, ma da quando mi sono imbattuto nello stesso problema ho pensato di condividere come l'ho risolto .

ho messo il mio controller pacchetto nel controller sottodirectory, in modo che la mia struttura di directory simile a questo:

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

Poi, ho aggiunto la cartella controller alla mappa composer.json classe caricamento automatico del mio pacchetto.

{ 
    "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" 
} 

Infine, mi sono imbattuto composer dump-autoload nella directory principale del pacchetto, e quindi fare riferimento il controller in base al nome del file percorsi.

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

Penso che questa risposta sia molto meglio. – DonSeba