2009-12-31 22 views
6

¿Cuál es la mejor manera de organizar controladores? Digamos que tengo un controlador de usuario y una acción de registro, si también tengo una acción process_registration donde validar y procesar los datos, o simplemente hacer todo el procesamiento dentro de la acción de registro. ¿Debería tener una acción de validación/procesamiento para cada acción que lo requiera (registro, registro de proceso, etc.)Cómo organizar sus Controladores para obtener la mejor estructura (MVC)

También noté que mucha gente tiene módulos y controladores únicamente para validar y procesar información (supongo que mantener toda la lógica de validación y las reglas en un solo lugar, tal vez?)

Supongo que mi pregunta es, ¿a qué distancia deben separarse las cosas? Esta pregunta va para Modelos y Visiones también.

Respuesta

3

En general, su validación debe realizarse en el modelo; ese es el punto del paradigma de MVC. La lógica del controlador consiste en hacer rebotar al usuario entre las acciones, las vistas son puramente de presentación y la lógica comercial se encuentra en los modelos.

Ciertos frameworks (CodeIgniter) divergen enormemente de la intención de MVC al hacer modelos de objetos planos que no tienen lógica (validación u otra) adjunta, requiriendo que mueva su lógica de validación a la capa de controlador, pero en ese punto su " los modelos "no son realmente modelos en absoluto, sino matrices glorificadas.

En cuanto a tener dos acciones "registrar" y "procesar_registro", me parece mucho más limpio tener una acción, que responde de manera diferente a las solicitudes de publicación y recepción. Me llamar a esta acción "crear" para mantener las cosas REST, y tienen una ruta definida whereever su marco define que es rutas para mapear "/ registro" a "/ usuario/a crear"

Ejemplo pseudo-php:

<?php 

class User_controller { 
    // [GET|POST] /users/create 
    function create() { 
    $user = new User(); 
    $error = ''; 

    if (postback) { 
     // form has been submitted. 
     $user->name = $_POST['name']; 
     $user->password = $_POST['pasword']; 

     if (validate_user($user)) { 
     $user->save(); 
     redirect("user/show/$user->id"); 
     } 
     // user save failed, fall through to displaying the new user form 
     // the user's name and password (and other fields) are now populated, 
     // and will display 
     $error = 'Account creation failed.'; 
    } 

    // Render the view with the user and the error message (if any) 
    render('views/users/create', $user, $error); 
    } 
} 

?> 
+0

Muchas gracias, sería genial si pudiera explicar cómo se vería su modelo en este ejemplo ... gracias – BDuelz

1

Mi sensación es que es mejor mantener la validación y el "procesamiento" en el modelo. Use el controlador solo para administrar la asignación de la solicitud a una función de modelo.

This section de "Zend Framework: Surviving The Deep End" puede ser una buena lectura.

0

Supongo que el mejor consejo que puedo dar en base a su pregunta es que usted querrá dividir sus acciones dentro de un controlador en la medida en que desee modularizar su sitio. También deberá tener en cuenta que existen costos tanto en el procesamiento como en el SEO si se mueve continuamente de una acción a otra, ya que las acciones deben estar asociadas a URL únicas.

Aquí hay un caso de uso en el que desea separar el registro de la acción de registro: Desea poder registrar a un usuario a través de AJAX en varios lugares del sitio. Con una acción diferente para ir a la página de registro y procesar los datos de registro, lo más probable es que pueda reutilizar las acciones tanto para una página de registro como para una caja de luz de registro o un cajón de registro rápido en cualquier página.

Un caso en el que no desea molestarse en dividir el proceso de registro y la página de registro es si solo planea tener una página de registro estático. De esta forma, puede verificar y ver si recibe datos del formulario y hacer tanto la visualización del formulario como el procesamiento en una sola acción.

Cuestiones relacionadas