2011-02-12 8 views
5

En MVC es como http://www.yourdomain.com/sampleController/sampleAction/ y si llama solo /sampleController/ entonces /sampleController/indexAction/ y si solo llama/entonces /indexController/indexAction/ incendios.¿Cuál es la convención sobre la estructura de URL en el patrón MVC/HMVC/PAC?

Por supuesto que hay excepciones, pero eso es más o menos la convención.

Zend tiene algo de smilir. Lo llaman Módulos.

Básicamente son solo carpetas que contienen una lógica MVC cada una. Entonces puede llamar al . Si solo llama al /Module1/, entonces /Module1/indexController/indexAction/ incendios. Es conveniente si tienes un gran proyecto porque puedes estructurar aún más, pero es molesto si solo tienes un pequeño proyecto.

Así que me gusta mucho la Idea de HMVC/PAC y quiero adoptarla en mi marco.

¿Entiendo correctamente que es básicamente lo mismo que Zend pero con módulos anidados ilimitados?

Entonces, por ejemplo, tengo /sub-project/sub-sub-project/controller/action/?

Y cuál es la convención si llamo/A/B/C/D /.

¿Significa la acción D en el controlador C en el módulo A/B? O IndexAction en el Controlador D en el Módulo A/B/C?

Lets lo puso en un ejemplo:

Content 
    ToplistController 
     AdministrateAction 
     IndexAction 
ContentController 
    ToplistAction 
Users 
    Chat 
     RoomController 
      IndexAction 

ahora llamo la URL /content/toplist/.

Para la URL /users/chat/room/?room=1, el ejemplo lo hace obvio porque solo hay una posibilidad. ¿Pero es el correcto? ¿Existe una convención para abordar de manera única la acción correcta en el controlador correcto?

Mi primera idea fue "adivinar lo menos posible".

Así que primero compruebo si la url está directamente relacionada con una acción.

Y si hay un controlador/módulo llamado igual con una acción de índice, simplemente no puede disparar si hay una coincidencia en un "nivel superior".

Si este no es el caso, veo si la url coincide directamente con un controlador y anexa IndexAction.

Si este no es el caso también busco un módulo y adivino IndexController e IndexAction y si este no es el caso, busco un módulo llamado índice.

Pero me gustaría evitar este elemento if/else y el acceso al sistema de archivos. Entonces me pregunté cómo sería la convención. ¿O hay incluso uno? ¡No pude encontrar ningún ejemplo!

¿O algo así como llamar a IndexAction si no se especifica ninguno pero no se ha hecho pero cada "url corta" debe especificarse en una lógica de enrutamiento separada?

¿O he entendido por completo el concepto de HMVC/PAC?

FYI: Incluí la etiqueta php porque estoy haciendo mi framework en php y quiero saber sobre las convenciones en php. A menudo he visto diferencias en otros lenguajes de programación.

+1

Espero haber sido claro. Explicar cosas tan abstractas en inglés no es tan fácil para mí. Si algo no está claro, pregunte para que pueda refinar la pregunta. –

+0

+1 interesado en hacer una pregunta no solo en publicar –

Respuesta

1

No existe una convención oficial independiente del marco.

URIs identify resources. La forma en que un marco asigna esos URI a las funciones internas de la aplicación depende del marco. Por ejemplo, si desea hacer REST, no tendrá acciones, porque actions are implied by the used HTTP verbs, p.

DELETE http://example.com/resourceName/1234 

mientras que el mismo en un marco "enrutado" podría ser algo así como

POST http://example.com/resourceName/delete (with POST Body 1234) 

con las dos URI de alguna forma de mapeo para el mecanismo de la aplicación que sabe cómo eliminar.

2

Una convención simple (y ampliamente aceptada, creo) es la presencia/ausencia de una barra inclinada, donde A/B/C/D implicaría IndexAction en el Controlador D y A/B/C/D implicaría una acción D en el Controlador C.

+0

¡Oh, no estaba al tanto de esa convención! –

Cuestiones relacionadas