2014-04-25 15 views
9

Vorrei creare un'interfaccia amministratore per il mio progetto Laravel, che è completamente separato dal lato utente.Best practice per la creazione di un'interfaccia amministratore in Laravel 4

Ad esempio, nel framework Yii posso creare un modulo e questo garantirà la completa separazione dal lato utente. All'interno di un modulo che posso usare la struttura cartella separata ecc

+0

Questo può aiutare: http://www.packtpub.com/article/laravel4-creating-a-simple-crud-application-in-hours – HeroFTime

risposta

2

Se si ha familiarità con il compositore è possibile importare in pacchetti (aka moduli)

c'è un modulo ampiamente disponibile con interfaccia multi livello già chiamato Sentry 2.0: https://github.com/cartalyst/sentry

Si potrebbe anche creare il proprio se necessario se quello che propongo è troppo complesso.

Esiste persino una versione di sentinella pronta per laravel.

+0

sfortunatamente non ho familiarità con il compositore, ma mi piacerebbe imparare/usandolo. Grazie –

+0

è il tuo modo principale per ottenere Laravel. Guarda l'eccellente tutorial di distribuzione di Laravel di Jeffrey Way https://laracasts.com/lessons/laravel-installation-for-newbs - mostra il compositore - come d'ora in poi dovresti iniziare a prenderne dimestichezza se vuoi avanzare in una programmazione e non reinventare la ruota. – azngunit81

0

Uso la stessa struttura di directory che si desidera utilizzare nella maggior parte (se non tutti) dei miei progetti Laravel. Fondamentalmente, tengo le viste di amministrazione e i controller di amministrazione separati da quelli front-end.

Esempi: Controller:

app/controllers/admin/admin * Nome * controller.php app/controllers/site/* Nome * controller.php

Visualizzazioni: app/views/admin/some_folder /index.blade.php app/views/site/some_folder /index.blade.php

vorrei anche suggerire di installare questo laravel proj ect https://github.com/andrewelkins/Laravel-4-Bootstrap-Starter-Site che darà un ottimo inizio su come organizzare le cose nel tuo progetto laravel. Ha anche la stessa struttura di cartelle che vorresti usare.

Buona fortuna.

24

Questa è davvero una grande domanda e una risposta non può coprire tutto ciò che riguarda le migliori pratiche per i controller di amministratore o di gestione del back-end, ma ci sono alcuni concetti di base per la costruzione di un Admin Panel:

// Keep all of your admin routes inside something like this 
Route::group(array('prefix'=> 'admin', 'before' => 'auth.admin'), function() { 

    // Show Dashboard (url: http://yoursite.com/admin) 
    Route::get('/', array('uses' => 'Admin\\[email protected]', 'as' => 'admin.home')); 

    // Resource Controller for user management, nested so it needs to be relative 
    Route::resource('users', 'Admin\\UserController'); 

}); 

// Other routes (Non-Admin) 
Route::get('login', array('uses' => '[email protected]' 'as' => 'login')); 

Utilizzando un prefix è possibile separare tutti i percorsi di amministrazione il cui prefisso url verrà prefisso con admin quindi, se si dispone di un controller users per la gestione utenti nel back end, sarà url prefisso con admin, ovvero site.com/admin/users. Anche utilizzando un filtro before Si possono aggiungere autenticazione per tutti i controller di amministrazione in un posto, che significa, per accedere a tutti i tuoi utenti controllori di amministrazione deve essere registrato e il filtro potrebbe essere qualcosa di simile:

Route::filter('auth.admin', function($route, $request, $args){ 
    // Check if the user is logged in, if not redirect to login url 
    if (Auth::guest()) return Redirect::guest('login'); 

    // Check user type admin/general etc 
    if (Auth::user()->type != 'admin') return Redirect::to('/'); // home 
}); 

Per , CRUD (Crea, Leggi, Aggiorna, Elimina) usa un resourceful controller, ad esempio, lo UserController in un esempio di dichiarazione di rotta piena di risorse.

Utilizzare classi di repository (modello di repository) per il disaccoppiamento delle dipendenze, leggere this article.

Utilizzare sempre un percorso denominato, ad es.array('as' => 'routename', 'uses' => '[email protected]'), questo è un esempio di denominazione di un percorso. I percorsi denominati sono facili da consultare, ovvero return Redirect::route('admin.home') reindirizzerà a site.com/admin perché abbiamo utilizzato admin.home in as per assegnare il nome per quella rotta.

controller Conservare amministrazione in una cartella separata e utilizzare un namespace per esempio, Admin\\[email protected] regolatore dovrebbero essere in app/controllers/admin e il controller DashBoardController dovrebbe essere simile a questo:

<?php namespace Admin; 

class DashBoardController extends \BaseController { 
    public function index() 
    { 
     //... 
    } 
} 

Ci sono più, ma è abbastanza per cominciare, leggere gli articoli online e leggere lo documentation.

+0

Penso che come \ Basecontroller, dovrò includere tutti gli helper come Request, View etc qualunque sia richiesto nel metodo controller, altrimenti, l'errore verrà generato come una classe Request non trovata. Come uscire da questo problema? – neeraj

+0

Sì, se si utilizza 'namespace', allora è necessario usare' \ 'o aggiungere l'istruzione' use' top della classe come 'use Request;'. –

+0

Ho trovato un altro modo migliore è quello di mantenere semplicemente tutti i controller nella cartella di amministrazione e caricarli automaticamente in composer.json, in tal caso non sarà necessario utilizzare lo spazio dei nomi o aggiungere manualmente gli helper. – neeraj