Domanda

Sto costruendo un MVC in cui tutto è un modulo. Ciò mi permetterà di separare raccolte di oggetti come forum e moduli utente per organizzare ulteriormente il mio MVC.

/blog
    /controller
    /model
    /view
/user
    /controller
    /model
    /view
/forum
    /controller
    /model
    /view

Attualmente mappino i percorsi per qualcosa di simile forum/edit/34 a /forum/controller/edit.php che contiene il Forum_Controller_Edit classe. (Questo è leggermente diverso dall'approccio standard in cui tutte le azioni sono metodi di un controller Forum_Controller::edit()). Ciò mi consente di separare tutte le singole "azioni" di un controller nei propri file, quindi non devo gestire i controller di grandi dimensioni con 10 diverse azioni.

Comunque, ecco il problema. Supponiamo di voler aggiungere nuovi controller a un modulo. Ad esempio, diciamo che voglio avere argomenti del forum (forum/topic/view/34). Potrei creare un nuovo modulo "argomento".

/forum
    /controller
    /model
    /view
/topic
    /controller
    /model
    /view

Ma poi 1) dovrei usare l'URL come /topic/view/ invece di forum/topic/view, 2) Avrei separato i componenti correlati (l'argomento dovrebbe far parte del modulo del forum) e 3) ora non sarei in grado di creare un modulo "argomento" generale per qualcosa di simile a nodi di contenuto se lo volessi.

Quindi, come posso creare un MVC modulare consentendo più controller (con più azioni) in ciascun modulo?

Framework Kohana Ho deciso di implementare un HMVC per risolvere questo problema. Tuttavia, ciò si traduce in molti controlli IS_FILE () per trovare la posizione corretta del file che si desidera caricare. I controlli I/O sono molto preziosi sull'hardware delle materie prime, quindi non lo considero un'opzione. Inoltre, non è evidente quale versione di una classe viene caricata, il che può portare alla confusione quando si lavora con più classi con lo stesso nome.

Vorrei trovare una soluzione a questo problema che non coinvolge percorsi di presetting o controlla le cartelle per la classe giusta. Eppure, degli ultimi 20 framework che ho guardato attraverso non sembrano avere una buona risposta a questo problema universale. Qualcuno ha delle idee?

Aggiornamento del routing

Se dovessi implementare il routing, come funzionerebbe? Come gestirei il primo (/forum), il secondo (/forum/vista) e il terzo livello (/forum/argomento/vista)? In che modo i miei percorsi conoscerebbero la differenza tra un percorso di terzo livello e una via di secondo livello con un parametro? In altre parole, quale di questi proverebbe a fare il mio sistema? (Dato l'URI "Forum/Topic/View/34")

$controller = new \Forum\Controller\Topic\View;
$controller->action('34');

// or
$controller = new \Forum\Controller\Topic;
$controller->view('34');

// or
$controller = new \Forum\Controller;
$controller->topic('view', '34')

Routing Update 2

Prendendo Consigli di Kyles L'ho deciso Tutti i controller Avrà bisogno di un set di percorsi che mi permetta di definire anche quale delle classi sopra il percorso URL "Forum/Topic/Visualizza/34". Dopotutto, ogni URL è importante e non dovrebbe essere basato sulla struttura del filesystem che hai in atto. Credo che abbia ragione nel dire che il design dell'URL merita più attenzione di quanto spesso lo diamo.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top