Utilizzo dei parametri predefiniti per errore 404 (PHP con design mvc)?

4

Ho un framework personalizzato (scritto in PHP). Funziona tutto molto bene, ma ho qualche dubbio su una certa cosa.

In questo momento, quando un utente chiama questo URL, ad esempio:

http://host.com/user/edit/12

Che verrebbe risolto in:

  • user = userController
  • edit = editAction () in userController
  • 12 = trattato come parametro

Ma supponiamo che il controller 'userController' non esista. Quindi potrei lanciare un 404. Ma d'altra parte, l'url potrebbe anche essere usato come parametro per indexController (che è il controller predefinito). Quindi in tal caso:

  • controller = indexController
  • utente = potrebbe essere un'azione in indexController, altrimenti trattata come un parametro
  • edit = trattato come parametro
  • 12 = trattato come parametro

In realtà è così che funziona adesso nel mio framework. Quindi, in pratica, non lancio mai un 404.

Potrei naturalmente dire che solo i parametri possono essere dati se il nome del controller è esplicitamente nominato nell'URL. Quindi se voglio l'url di cui sopra:

http://host.com/user/edit/12

Per essere invocato da indexController, nell'indiceAction. Quindi devo specificatamente dire quale controller e azione utilizza nell'URL.

Quindi l'URL dovrebbe diventare:

http://host.com/index/index/user/edit/12
  • index = indexController
  • indice (2 °) = il metodo di azione
  • utente = trattato come parametro
  • edit = trattato come parametro
  • 12 = trattato come parametro

In questo modo, quando un controller non esiste, non reindirizzare tutto come parametro per il controller di indice e semplicemente lanciare un errore 404.

Ora la mia domanda è, quale è più preffered? Dovrei consentire a entrambe le opzioni di essere configurabili in un file di configurazione? O dovrei sempre usare uno di loro. Semplicemente perché questo è l'unico e il modo migliore per farlo?

    
posta user1175327 27.06.2012 - 14:04
fonte

1 risposta

2

Se stai forzando il sistema a chiamare l'url http://host.com/user/edit/12 come http://host.com/index/index/user/edit/12 , allora stai reinstradando senza motivo per ogni controller esistente e la tua logica sarebbe valida solo per un controller non esistente.

That way, when a controller doesn't exist, i don't reroute everything as a param to the index controller and simply throw a 404 error.

inoltre se hai finalmente deciso di lanciare 404 allora perché non farlo nel file di esecuzione principale? probabilmente index.php?

Il tuo sistema in index.php controlla un controller se esiste eseguirlo altrimenti lo passa al controller predefinito che controlla se i suddetti param contengono un'azione per il controller predefinito e se esiste allora va bene altrimenti mostra 404 errori. Perché coinvolgere il controller predefinito per questo in definitiva stai chiamando il controller predefinito senza motivo.

    
risposta data 27.06.2012 - 14:31
fonte

Leggi altre domande sui tag