2010-07-13 9 views
8

Acabo de reformatear el diseño predeterminado de mi aplicación CakePHP. Eliminé tanto html en línea como pude colocando casi todo dentro de los métodos html helper.¿Es esto excesivo o un buen uso del ayudante de HTML de CakePHP?

Fue divertido, pero me pregunto qué beneficio he obtenido con este ejercicio, si es que hay alguno.

<?php 
    $output = implode("\n", array(
     $html->docType(), 
     $html->tag('html', implode("\n", array(
      $html->tag('head', implode("\n", array(
       $html->charset(), 
       $html->tag('title', 'Title For App'), 
       $html->css('css', NULL, array('media' => 'screen,print')), 
       $html->css('print', NULL, array('media' => 'print')), 
       $html->script(array('cufon', 'jquery','external')) 
      ))), 
      $html->tag('body', implode("\n", array(
       $html->tag('div', $content_for_layout, array('id' => 'wrapper')), 
       $html->scriptBlock('Cufon.now();') 
      ))) 
     )), array('xmlns' => 'http://www.w3.org/1999/xhtml')) 
    )); 
    echo $output; 
?> 

Supongo que al menos se ve bien y compacto, y es bastante legible. ¿Qué peligros debería tener en cuenta en este escenario? ¿Debería estar al tanto de cualquier problema de velocidad?

Me gusta — y yo no.

Creo que necesito convencer de una forma u otra.

Si te estás preguntando, las implosiones ponen bonitos saltos de línea en el html cuando se ve la fuente.

+4

¿Sabes qué sería más limpio, más rápido y más sucinto? Straight HTML. No puedo soportar este tipo de sustitución de sintaxis de 1 a 1. Escribe tu HTML en HTML. No uses el claxon en un intermediario para evitar las temidas etiquetas ''. – meagar

+1

Bueno, la velocidad no es un problema. Envolví el código en llamadas de microtime y la vista se muestra en 0.00459 segundos. – Stephen

+0

En el instante en que necesite usar cualquier control de flujo más significativo que un ternario, está (para usar el término técnico) completamente deshuesado. –

Respuesta

10

Tuve esta discusión en el grupo de Google hace algunos años. Eventualmente, te darás cuenta de que no hay mucha diferencia en la forma en que lo haces hasta que necesites manipular las cosas por programación; luego, si recorriste la ruta HTML, encontrarás tu código salpicado con <?php?> o concatenaciones de cadenas o sustituciones de variables de comillas dobles.

Ahora, muchas aplicaciones en la línea, prefiero mantener las que tienen más ayuda que el marcado.

Hay una gran cantidad de HTML que no está cubierto por los ayudantes, por lo que no puede evitar una mezcla, pero puede minimizar la complejidad y la confusión mediante el uso de ayudantes siempre que sea posible. Cuando comienzas a usar formularios, obtienes muchas cosas de seguridad y los identificadores y NAME con el formato CakePHP lo prefieren.

PHP y CakePHP están diseñados para esto. ¿Por qué solo usar medio lenguaje o medio marco?

+0

Eso me vendió. ¡Gracias! – Stephen

+1

Alimentar su código con '' es para lo que PHP es: es un sistema de plantillas. Simplemente mantenga la lógica de su controlador separada de la lógica de su pantalla y los archivos de su plantilla deberían permanecer bastante limpios. – meagar

+2

Lo siento, meagar, pero no estoy de acuerdo contigo. Manipular cómo se ven los datos es inherente a View. Permanecer fiel a la arquitectura MVC no implica vistas sin código. Mantenga la lógica de negocio fuera de la vista, por supuesto ... pero clasifique, empalme, voltee, y manipule de otra forma la forma en que desea VER sus datos en la VISTA. – Stephen

1

Programáticamente, eso es muy correcto, porque nunca se está construyendo una cadena. Lo bueno es que, dado que todo es una función, puede pasarle todo tipo de parámetros y aplicar toda la lógica a sus controladores. Por lo tanto, su título, por ejemplo, podría generarse dinámicamente para cada página, y luego pasar a su llamada $html->tag('title', 'Title For App').

Sin embargo, debido a la gran cantidad de llamadas a la función, sospecho que no funcionará tan bien como el simple uso de PHP para repetir y repetir variables.

+0

La complejidad de la manipulación de datos podría transferirse fácilmente a los elementos o mediante un asistente personalizado. He estado trabajando así últimamente y tengo que decir que, para alguien que prefiera escribir php que html, parece más fácil de mantener. –

8

El beneficio innegable de esto es una sintaxis 100% correcta, ya que ha eliminado cualquier posibilidad de digitación de grasa y falta de etiquetas de apertura/cierre. Sin embargo, lo que puedo decirte por experiencia es que dentro de medio año, será el doble de difícil leer y modificar esta estructura. También es realmente difícil insertar elementos condicionales. Tendría que recurrir al operador ternario aquí, lo que hace que las cosas sean aún menos legibles.

En general, recomendaría ir con una mezcla HTML/PHP tradicional.

3

Al utilizar los ayudantes, en cierto modo, será capaz de probar su código en el futuro. Entonces, cuando aparece HTML5 y las etiquetas html o head cambian en la nueva especificación. Teóricamente solo cambias tu clase de ayuda html y todas tus marcas son HTML5.

Sin embargo, por el contrario, también confía en Cake para generar etiquetas bien formadas. Aunque muchos de estos marcos son de pila completa, inevitablemente hay algunas áreas que manejan mejor que otras. No debe esperar que instalen todo el conjunto de etiquetas HTML.

Personalmente creo que es excesivo hacer lo que usted ha hecho. Me gusta usar los ayudantes de HTML para enlaces, urls y archivos incluidos debido a los beneficios de mapeo de directorios. Pero no uso los helpers para generar una etiqueta simple div.

4

Personalmente estoy en conflicto con esto, pero elijo el modo HTML + PHP cuando trabajo con PHP. Puedo ver las ventajas de cualquiera, pero esta es la razón por la que elijo HTML + PHP:

  1. PHP es un lenguaje de plantillas, el mejor. Como lenguaje de plantillas, creo que es muy superior a cualquier otro lenguaje de plantillas de PHP, y muchos de los lenguajes de plantillas en otros marcos web de lenguaje por su flexibilidad y poder.

    Si estuviera trabajando con un lenguaje como Python o Java, probablemente preferiría el formulario que sugiere, pero simplemente no es la solución perfecta cuando se trabaja con PHP.

  2. Pierdes la capacidad de utilizar las muchas herramientas ya desarrolladas para trabajar con HTML. Pierdes especialmente a las personas que se sienten cómodas modificando HTML y que de otra forma podrían hacer cambios simples en las vistas.

  3. Absoluta flexibilidad sin agregar más capas de API.

Como efecto secundario de esto, tiendo a utilizar la sintaxis for(): y endfor;, etc, y se esfuerzan por etiquetas HTML Nunca eco - Voy a reestructurarse para evitarlo (es decir, sin utilizar métodos menos dentro de una helper etc, en cuyo caso generaré mis etiquetas con Html Helper, porque es tonto buscar sopa HTML dentro de una clase o función de PHP: P).

+0

Acepté la respuesta de Leo hace mucho tiempo, pero desde entonces me he movido hacia hacer exactamente lo que describes aquí. Utilizo el HTML Helper de CakePHP en métodos y el HTML simple en plantillas (excepto para elementos "dinámicos" como enlaces).Usar el HTML helper para los enlaces me impide tener que cambiar todas mis vistas cuando configuro nuevas rutas). – Stephen

+0

Ah, debería haber mencionado que uso Form and Html Helpers en mis vistas en lugar de generar formularios y enlaces manualmente. Además, la función __() para i18n. – Iiridayn

Cuestiones relacionadas