[PHP] Consulta sobre estructuración.

bLaKnI

A la 'pa' de Dio! ^^

Buenas gente!
Soy bastante novato en PHP, pero habiendome pelado los dedos con muchas otras cosas y para el caso específico, con JSP con implementación MVC, he podido adaptarme rapidísimamente.

Estoy creando algunas virguerias. Realmente, PHP se presenta genial (en su momento lo detracté y lo demonicé, pero dije que quizas algun dia cambiaria de parecer, y aquí estoy... xD), pero tengo dudas en la estructuración de ficheros y los accesos en general, ya que parto del concepto "servlet", y aquí, vamos, ni de broma! xD

Así que mas o menos lo tengo todo bastante clarito, pero me surgen dudas de implementación en algunos casos.

Por lo general, tengo FICHEROS PHP, que realizan una tarea determinada, y posteriormente, se redirige el tráfico via header("Location: ...");
Ninguno de estos ficheros contiene HTML y por lo tanto, no hay problema.
Hasta el momento todo bien, pero ahora, he necesitaod cargar contenido HTML dinámico mediante import(). Y ahí surgen las dudas:

  • En JSP, te enseñan a mezclar LO MÍNIMO HTML con JSP. En PHP, es evitable, pero casi siempre hay algo de mezcla. Con JSP, los includes solian ser de webs enteras, con su header y body.
    Pero aquí, ¿es correcto tomarme la licencia de no añadir ni header ni body ni ostias, e ir directamente al trozo de html que me interesa? Porque lo tengo así, y funciona bien, obviamente. Y a nivel visual al hacer "ver codigo de la web", es limpio y correcto, porque sino, es como una web dentro de otra web (como sucedia con JSP).

  • Cuanta mezcla de codigo con HTML puede/debe haber mas o menos?

Os enseño el tema concreto, para que lo evalueis o me deis algunas alternativas de diseño:

NOTA: pongo "xxx", porque no es relevante el codigo en si, solo la estructura.

index.php

....

<div id="xxx">
                <?php if(!isset($_GET["xxx"])){?>
                ... una serie de cosas varias ...
                <?php }else{?>
                    <?php 
                    include 'xxx.php';?>  <··· aquí me quiero centrar. (no os fijeis en detalles, debo limpiar el codigo aún)
                <?php }?>
            </div>

....

xxx.php

<?php
    session_start();
    include 'yyy.php'; <··· aqui tambien quiero centrarme.
?>

<div class="xxx">
    <?php
        $filas = doSelect("una query concreta, da igual"); <··· ojo a esta función.
        echo "<table>\n";
        while ($fila = mysql_fetch_array($filas, MYSQL_ASSOC)) {
            echo "\t<tr>\n";
            foreach ($fila as $col_value) {
                echo "\t\t<td>$col_value</td>\n";
            }
            echo "\t</tr>\n";
        }
        echo "</table>\n";

    mysql_free_result($filas);
?>
</div>

yyy.php

aquí, hay algunas function(). Nada de html.
Entre ellas, esta la de doSelect() que he señalado.

Lo veis una buena estructura?

Prescindiriais de yyy.php, y lo pondriais directamente arriba en xxx.php? Lo pregunto porque no deja de ser un ficher/web accesible y si alguien lo escribe en la URL, sencillamente sale una web blanca. No se puede hacer nada, porque no hay html, pero no mola.
¿Se puede hacer como en JSP que determinadas webs en una carpeta concreta WEB_INF, no son accesibles desde URL?

Fijaos que xxx.php, lo he puesto TODO entero. Ahora no hace mucho. Pero fijaos que SI mezcla html con php (el DIV). He decidido no hacer toda la estructura HTML (header, body...) y solo añadir el codigo HTML a saco porque será importado en index.php, es eso correcto? Mejor crear la web entera por si alguien accediera mediante URL?

Muchas mercés!

Si se me van ocurriendo preguntas, os las lanzo!

THX!

erdanblo

¿Por qué no usas un framework?

Creo que te va a resultar mucho más rápido de aprender, y a la larga cuando tengas que hacer algo serio, vas acabar tirando de ellos.

Para empezar, a mi me gusto CodeIgniter, pero tienes un montón de otros.

bLaKnI

Te agradezco la sugerencia! :)

Pero esq soy muy terco con eso... Ya en JSP, implemento mi propio MVC a mano.
No por nada, sinó porqué generalmente paso de usar frameworks (solo cuando realmente los necesito, como con Hibernate, Struts, o whatever...).

Pero el MVC, suelo implementarlo yo a mano. No a base de Beans (no me gustan demasiado).
Implemento un sistema de Actions manual, y lo gestiono todo yo desde init() y otros puntos importantes (doPost(), ...).

Me gusta conocer las APIs, me las leo y releo, y aprendo sus "natividades".
Ayudas de este tipo, provocan que a la larga te olvides de cosas básicas. Y es de agradecer, pero no siempre. Y ademas, PHP esta a un nivel tan alto de comprensión, que hacerlo mas fácil ya es difícil! xD

Total, que en PHP, me he visto igual que en JSP, no es nada difícil, y si eres organizado, rapidamente te haces con él.

Es cierto que no tengo una estructura MVC, y eso me jode un poco, pero no es un proyecto inmenso, así que tampoco es problematico.
Y después que en View, es casi imposible no meter un poco de codigo, así que mas o menos tengo claro que va donde.

La mayoria de .php, son Model. Acceden a BBDD y realizan determinadas cosas.
Algunos son View (index, y tal...). Pero no entiendo donde meter el controller aquí... xD
Si no hay servlet, no comprendo el concepto.
Podrian haber actions, pero que lógica tendria centralizar la gestion de POST o GET en php?

A ver si me lo podeis aclarar un poco pliz! xD

erdanblo

Mirate la parte de controladores y views de la documentación de CI.

Al menos CI lo que hace (bueno, tal como esta en la documentación), es que los controladores llaman a los Models tratan los resultados, y los devuelve a la views en forma de arrays de esta manera:

$datos[var1] = "lo que sea";
$datos[var2] = "result() de un query mysql";

Luego llaman a la vista:

$this->load->view('NombreVista',$datos);

Y ya en la vista solo tienes que hacer echo $var1 o como mostrar el result de mysql:

foreach($var2 as $row):
echo $row[loquesea];
endforeach;

No se si me explico, o si he metido un gambazo xD.

bLaKnI

Nono, habia mirado la doc, y parece correcto lo que dices.

De todas formas, hay que dedicar tiempo en aprender las características del framework en cuestión.
De momento quiero controlar PHP tanto como pueda. Y luego quizas me facilite la vida con algún buen framework.

Pero insisto en que de momento, no veo dificultad alguna en PHP. Solo que obviamente, no cumplo MVC a la perfección.

Otra cosa importante:

  • Hay manera de evitar el acceso por url a algunas páginas? En JSP se puede, pero en PHP?
  • Algo sobre URL amigables (sin tirar de framework)? He leído algo de mod_rewrite. Sabeis de que va?
erdanblo

Pues esas dos cosas, yo solo sé hacerlo editando la configuración de Apache a través de .htaccess

mod_rewrite es un módulo de apache.

GamA

Yo he estado haciedo webs en php sin framework y si que puede parecer mejor al principio...

Después para mi PFC he tenido que usar el framework Symfony y facilita muchísimo el acceso a la base de datos, etc...

Te lo recomiendo la verdad, aunque tendrás que aplicarle muchas horas para ver como va, pero bueno, eso es ley de vida.

Beavis

Yo he usado varios frameworks, desde zend a cake pasando por CI y al final para mis proyectos acabo siempre con algo parecido a http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html
Todo depende de la aplicación pero vamos siempre intento tirar hacia lo más simple.

bLaKnI

No se...
Esq no veo dificultad alguna.

Acceder a la BBDD? 3 lineas. Conexion -- Seleccion BBDD -- Query. Es facilísimo.

De momento no me convence. :)
Quizas algu dia mire algo, pero me gusta saber bine lo que hago, y con un framework, te pierdes de la misa la mitad (aunque eso no tiene porque ser malo!). En un caso como este, no se sufre. xD

Usuarios habituales

  • bLaKnI
  • Beavis
  • GamA
  • erdanblo