programacion

Contenidos de Prueba | Generados con el módulo Devel

Video de Youtube
URL de Video remoto
Texto

      Cuando estamos empezando con el desarrollo o implementación de cualquier proyecto, en la mayoría de los casos nos resultará necesario la creación de contenidos con los que podamos realizar pruebas de todo tipo.

     Para realizar esta tarea, en Drupal contamos con el módulo Devel Generate, integrado dentro de las dependencias del módulo Devel. Por lo que, una vez instalado y activado en nuestro Drupal, sólo tendremos que dirigirnos a la url "/admin/config/development/generate/content", y allí veremos el listado de todos los tipos de contenidos que tengamos creados en nuestro proyecto.

CÓMO INSTALAR Y CONFIGURAR EL MÓDULO:

Paso 1 Descargar el módulo:

     Lo primero que tendrás que hacer es descargarlo, para ello, a partir de Drupal 8 se recomienda que utilices el gestor de paquetes Composer, ya que te facilitará tanto la instalación como futuras actualizaciones del tus proyectos. No obstante también podrías descargarlo desde la Página oficial del módulo y una vez descargado, tendrás que colocarlo en la carpeta "modules" o "modules/contrib", dependiendo de tu instalación y asegurarte de descargar todas sus dependencias o el módulo no funcionará, esta es una de las ventajas con las que cuentas al hacer la instalación usando Composer.

Paso 2 Activación del módulo :

     Para activar el módulo Devel, al igual que todos los demás módulos contribuidos de Drupal, tendrás la posibilidad de hacerlo, mediante el uso de la herramienta Drush, con el comando "drush en devel -y", que sirve para activar cualquier módulos y todas sus dependencias, o desde la interfaz de Drupal.    

Devel Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

Devel Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Además de poder generar automáticamente nuestros contenidos, podremos configurar algunas opciones adicionales como, especificar su fecha de publicación, comentarios relacionados, títulos para los contenidos con un límite de caracteres específico, el idioma o incluso los usuarios que los crearon, esta última opción nos facilitará el testeo de los permisos de usuario.

     Para generar nuestro contenidos, sólo tendremos que marcar las opciones con las que deseamos trabajar, es recomendable intentarlo la primera vez como poco contenido para estar seguros de obtener lo que pensábamos o si hará falta modificar algún campo.

     Si no estás conforme con el contenido generado o simplemente quieres volver a generar contenidos otra vez, puedes seleccionar la opción de eliminar todos los contenidos previamente creados antes de ejecutarlo.

Devel Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Una vez que hayamos revisado todos los campos que nos interesan, haremos clic en el botón que aparece en la parte inferior de la pantalla y comenzará el proceso inmediatamente.

Devel Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Cuando se haya realizado el proceso de generación de nuestros contenidos, veremos un mensaje de confirmación en la parte superior de la pantalla, con la cantidad y el tipo de contenido que decidimos utilizar.

Devel Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Para comprobarlo, sólo tendremos que dirigirnos al listado de contenidos en la url "/admin/content" y veremos el listado de contenidos generados por el módulo con las configuraciones adicionales, si es que hemos seleccionado alguna.

Devel Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

Módulo personalizado | Creación de plantilla

Video de Youtube
URL de Video remoto
Texto

Si no ves el video, puedes refrescar el navegador, presionando (Ctrl+Shift+R | Ctrl+F5 o Shift+F5), o abrirlo directamente desde el Canal de Youtube... HAZ CLIC AQUI

     Hoy hemos decidido que estamos dispuestos a seguir aprendiendo Drupal, porque nos apasiona obtener nuevos conocimientos, que solucionarán posibles retos en nuestro futuro próximo, o porque nos encanta ampliar nuestras posibilidades, tanto a nivel laboral como personal. Ya que la puesta en marcha de proyectos web, podrían representar el inicio hacia una carrera prometedora.

     Ahora que ya tenemos claro Cómo crear un módulo en Drupal 9, en esta ocasión nos vamos a concentrar, en la creación de una plantilla personalizada, con el objetivo de tomar el control sobre la presentación de los datos relacionados con el mismo. Para lograr nuestro propósito, tendremos que implementar uno de los "hooks" o funciones prefabricadas de Drupal que nos permitirán lograr toda clase de objetivos, en este caso será function hook_theme, la que se encargará registrar las implementaciones de un tema o "theme", dentro de nuestro tema o módulo personalizado.

     En este capítulo vamos a crear un módulo personalizado, al que añadiremos un controlador, que nos imprimirá en pantalla una página y posteriormente, también añadiremos mediante la function hook_theme en el archivo ( MIMODULO.module ) los datos y configuraciones que nos permitirán pasar por parámetros el título y otros contenidos que mostraremos en ella. 

     Finalmente, añadiremos el archivo routing ( MIMODULO.routing.yml ), para poder acceder a esta página una vez haya sido activado nuestro módulo personalizado. Este ejemplo te permitirá conocer la manera en que podrás implementar plantillas personalizadas en tus módulos.  

Requisitos

Cómo crear un módulo en Drupal 9

Cómo crear módulos con su Controlador y Plantilla en Drupal 9  

     Paso 1 Creación de tu módulo:

          Lo primero que deberías saber es cómo crear un módulo personalizado. Esencialmente para este ejemplo, lo que necesitarás será una carpeta con el nombre de tu módulo y dentro el archivo con el nombre del módulo y la extensión, eje.: "mimodulo.info.yml"

     Paso 2 Creación del archivo .module para implementar la function_hook_theme():

          En el archivo MIMODULO.module es donde podremos implementar los hooks o funciones de php en Drupal, en este ejemplo utilizaremos la function hook_theme, que se encarga de registrar las implementaciones del tema dentro de un módulo o tema personalizado, esto quiere decir, que las implementaciones declaradas por este hook o función especifican cómo un arreglo o array de renderización particular debe ser renderizada como HTML.

     Los párametros que utilizaremos en este ejercicio, estarán dentro de un array que nos devolverá la función y son, el nombre de la función y dentro de de ella, las variables que pasaremos posteriormente al controlador, para crear la página que imprimiremos una vez activado el módulo.

     Dentro de las variables, a su vez, tendremos un array de items, donde colocaremos todos las noticias que queremos presentar en la página una vez renderizada y el título de la página que será del tipo String.

<?php

/**
 * Implement hook_theme().
 */
function listado_noticias_theme($existing, $type, $theme, $path) {
    return [
      'listado_noticias' => [
        'variables' => ['items' => [], 'title' => '' ]
      ]
    ];
}

     Paso 3 Creación del Controlador o Controller:

          El Controlador o Controller es quien nos permitirá crear la página que se mostrará, una vez activado nuestro módulo, al renderizar los datos que hemos definido previamente en nuestra  function hook_theme.

          Para que pueda generarse nuestra página, vamos a añadir a nuestra clase controlador, un método al que llamaremos "page()", y dentro tendremos dos arrays, uno que contendrá el listado de noticias que vamos a recorrer usando nuestra function hook_theme, y otro con los datos que obtendremos al conectar con la información recibida desde la function hook_theme.

Custom Module Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

          Una vez creada nuestra clase controller con el nombre ListadoNoticiasController.php, dentro tendremos la siguiente estructura de código.

<?php

namespace Drupal\listado_noticias\Controller;

use Drupal\Core\Controller\ControllerBase;

class ListadoNoticiasController extends ControllerBase {

  public function page(){

    $items = [
      ['title' => 'Noticia 1'],
      ['title' => 'Noticia 2'],
      ['title' => 'Noticia 3'],
      ['title' => 'Noticia 4'],
    ];

    return [
      '#theme' => 'listado_noticias',
      '#items' => $items,
      '#title' => 'Listado de noticias'
    ];

  }

}

          El primer array, es un array de objetos, ya que cada noticia podrá tener tantos elementos como queramos especificar, para este ejemplo, sólo añadiremos el título, pero puedes añadir tantos como necesites, siempre tomando en cuenta la estructura ( "clave" => "valor" ), ya que los objetos, en realidad también son arrays.

$items = [
  ['title' => 'Noticia 1'],
  ['title' => 'Noticia 2'],
  ['title' => 'Noticia 3'],
  ['title' => 'Noticia 4'],
];

          El segundo array, que tendremos dentro de nuestro método "page()", es el que nos devolverá nuestro método al llamarlo, contendrá los parámetros necesarios para renderizar los datos recibidos desde la function hook_theme, y que harán posible la impresión en pantalla, de nuestros contenidos en formato de una página, al activar el módulo.

          En el primer parámetro del array, estamos llamando a nuestra función tema, que configuramos usando la function hook_theme, el segundo parámetro son los items, que hemos definido como una de las variables que pasamos y el último, será el título de la página, que también definimos mediante la función.

          Esto hará posible, que posteriormente podamos recorrer el primer array de items y mostrarlos en la plantilla correspondiente, que todavía no hemos creado. 

return [
  '#theme' => 'listado_noticias',
  '#items' => $items,
  '#title' => 'Listado de noticias'
];

     Paso 4 Creación de la ruta para acceder a la página renderizada:

          Una vez terminada la configuración de los datos que vamos a presentar en nuestra página, al invocar el método "page()", necesitaremos un modo de acceso, mediante url, para que podamos acceder a esta página y ver sus datos.

          En esta tarea nos ayudará el archivo listado_noticias.routing.yml , dentro de este archivo vamos a definir la url hacia nuestra página, el namespace para que drupal pueda encontrar en nuestro controlador el método que mostrará los datos y finalmente los permisos asociados a nuestro contenido, que serán los permisos por defecto, para que cualquier usuario que entre a la web, pueda verlo sin problemas.

          Es muy importante respetar los espacios al escribir los datos dentro del archivo rounting, se recomienda evitar la tecla tab para hacerlo y en su lugar, es mejor la barra espaciadora del teclado, contando con dos espacios a cada nueva línea que vayamos añadiendo.

listado_noticias.listado:
  path: '/listado-noticias'
  defaults:
    _controller: '\Drupal\listado_noticias\Controller\ListadoNoticiasController::page'
  requirements:
    _permission: 'access content'

     Paso 5 Creación de la plantilla:

          La última fase de este desarrollo, antes de activar el módulo, será la creación de nuestra plantilla, para dar formato a la presentación de los datos, una vez activado nuestro módulo.

          Para los nombres de las plantilla, se debe utilizar el guión medio "-", en lugar del guión bajo "_", y el nombre que debemos utilizar será el mismo de nuestra función tema, que hemos declarado en el function hook_theme.

          Por lo tanto, el nombre que tendremos que utilizar en este ejemplo será "listado-noticias.html.twig", además, colocaremos nuestras plantillas dentro de una carpeta llamada templates, siguiendo con la estructura habitual de drupal para todos sus módulos.

          Ahora que ya tenemos la plantilla creada, sólo resta imprimir los valores usando las dobles llaves, ej.: {{ title }} y en el caso de las noticias, crearemos un "ciclo for", para poder recorrer el array de items y acceder a todos sus datos relacionados.

<h3>{{ title }}</h3>
   <ul>
     {% for noticia in items %}
       <li>{{ noticia.title }}</li>
     {% endfor %}
   </ul>

          Ya podemos activar nuestro módulo y luego al acceder a la url que hemos definido dentro del archivo  listado_noticias.routing.yml, veremos nuestra página con todos los datos que habíamos configurado.

Custom Module Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

OOP | Métodos de Clase

     Es el momento de sacar uno poco más de provecho al uso de clases, porque aunque dentro de una Clase y de un Array podremos incluir datos, sólo dentro de una Clase podremos ejecutar funciones, conocidas también como Métodos.

     Un método no es más que una función, en la que podremos ejecutar código encapsulado que habita dentro de la clase. Existen varios tipos de Métodos, pero vamos a empezar poco a poco.

     Vamos a añadir un método al que llamaremos public function arrancarVehiculo(){}, dentro de nuestra clase Vehículo, así podremos ver y entender mejor el uso de los Métodos dentro de una clase. Añadiremos el siguiente código dentro de nuestra clase:

<?php

// Definimos la clase
class Vehiculo
{
  public $marca;

  public function encenderVehiculo ()
  {
     print 'RRRRUUUUUUUMMMMMMMM !!!!!!';
  }
}

     Con este nuevo código, ya hemos añadido un método, que nos devolverá en pantalla, el sonido de arranque del motor de nuestro vehículo. Ahora para realizar la llamada a este método, como ya hemos creado nuestro objeto, escribiremos el siguiente código:

// Ejemplo llamada a un método
$miNuevoVehiculo->encenderVehiculo();

     La diferencia entre llamar a una propiedad de la clase y a uno de sus métodos, es que al final del Método tendremos los paréntesis.

     El código completo que deberías tener en tu archivo de pruebas, será el siguiente:

<?php

// Definimos la clase
class Vehiculo
{
  public $marca;

  public function encenderVehiculo ()
  {
     print 'RRRRUUUUUUUMMMMMMMM !!!!!!';
  }
}

// Ejemplo de un objeto
$miNuevoVehiculo = new Vehiculo();
$miNuevoVehiculo->marca = 'Mercedes Benz';

// Imprimiremos en pantalla nuestro primer objeto
print "La marca de mi vehículo es: " . $miNuevoVehiculo->marca;
print '<hr>';
// Ejemplo llamada a un método
$miNuevoVehiculo->encenderVehiculo();

     Ahora, si guardarmos los cambios y refrescamos el navegador, deberíamos ver en pantalla el siguiente resultado:

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Excelente!!!, ya nada nos detendrá, porque acabamos de poner el motor en marcha y no vamos a deternos hasta alcanzar la meta.

     Recuerda, los Métodos son iguales a las funciones tradicionales, la diferencia está en que habitan dentro de la clase, por esta razón, para acceder a ellos, debemos hacerlo a través de los objetos de esa clase.

   Cómo acceder al valor de una propiead a través de Métodos

     Los Métodos, al igual que las funciones, también pueden ser empleados para obtener datos y devolverlos. En este caso añadiremos un segundo método a nuestra clase, con el objetivo de que nos devuelva el nombre de la marca del Vehículo. Pero primero vamo a añadir un texto estático, para comprobar que todo funciona:

// Ejemplos llamada a un método
$miNuevoVehiculo->encenderVehiculo();
print '<hr>';
print $miNuevoVehiculo->getBrand();

     Si refrescamos el navegador, deberíamos ver el siguiente resultado:

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Correcto, ya tenemos el resultado esperado, pero nos surge una nueva incógnita, ya sabemos que para acceder a la propiead del objeto, solo hace falta añadir la fecha antes del nombre de la propiead, pero en este caso, ¿Cómo podremos hacer, para que el método nos devuelva el nombre de la propiedad $brand, en este caso? 

     Para acceder a los valores desde dentro de un Método de clase, existe la variable especial llamada $this, en ella podremos acceder a los valores que existan dentro de la clase en la cuál reside nuestro método. La manera de llamar a la propiedad dentro del Método, utilizando $this, es la siguiente:

public function getBrand()
{
   return $this->brand;
}

     Una vez hagamos el cambio en nuestro Método y guardemos, podremos refrescar el navegador, para descubrir que ahora se muestra la marca de nuestro Vehículo, en lugar del texto estático que habíamos añadido al principio.

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Por ahora, nuestra clase Vehículo{}, sólo tiene una propiedad $brand, así que es el momento de probar otras opciones. Abriremos nuestro archivo functions.php y añadiremos el resto de características, comunes para todos los vehículos de nuestro listado:

public $brand;
public $year = 0;
public $color;
public $price =0;

     En este caso, he añadido el valor por defecto cero ( 0 ), a las propiedades referentes al año y al precio del vehículo, ya que no las hemos utilizado nunca, así evitamos posibles fallos en las llamadas, a nuestros objetos durante el desarrollo del código.

   Vamos a realizar una prueba llamando a la propiedad $year; para ello ejecutaremos un var_dump(). Si guardamos el cambio y refrescamos el navegador, debería devolvernos el valor por defecto, que será igual a cero (0):

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Ahora podremos asignarle un valor y volver a comprobar si todo funciona según lo esperado.

// Ejemplo de un objeto
$miNuevoVehiculo = new Vehiculo();
$miNuevoVehiculo->brand = 'Mercedes Benz';
$miNuevoVehiculo->price = 30;

     Si refrescamos el navegador, podremos comprobar que se ha realizado el cambio y ahora el precio que se muestra es el número que hemos añadido:

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Añadiendo complejidad al Método

     En el caso de los método anteriores, el resultado es muy simple, así que vamos a sacarle un poco más de provecho a los métodos en el siguiente ejemplo. Crearemos un nuevo método al que llamaremos getDeatilsVehicle(){}, el propósito de este nuevo método será obtener todos los detalles de un Vehículo inmediatamente:

public function getDetailsVehicle()
{
  return sprintf(
    '%s Y: %b C: %s P: %d',
       $this->brand,
       $this->year,
       $this->color,
       $this->price
  );
}

     Este método devolverá un resumen con todas las propiedades de nuestro objeto. Si quieres saber más sobre esta función HAZ CLIC AQUÍ

     Una vez hayamos completado nuestro Método, podremos llamarlo, al igual que hicimos con los anteriores:

// Otros ejemplos con métodos y propiedades
print $miNuevoVehiculo->getDetailsVehicle();

     Si refrescamos el navegador, el resultado obtenido en pantalla debería ser como el siguiente:

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

OOP | Clases y Objetos, diferenciación

    Antes de comenzar con las explicaciones sobre la diferencia que existe entre una Clase y un Objeto, vamos a crear un archivo en el que podamos realizar diferentes pruebas, que nos permitirán entender mejor los conceptos que iremos explicando.

    En mi caso el nombre de mi archivo será pruebas.php y estará en la carpeta raiz. Una vez creado el archivo, hagamos print, para comprobar que el archivo funciona correctamente si lo abrimos en el navegador.

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Ahora que ya hemos comprobado que todo funciona correctamente, intentaré explicarte con un ejemplo práctico, el uso de las clases y objetos. Lo primero que tendríamos que saber es que cómo se define una clase.

   Cómo definimos una Clase

     Para definir una clase de PHP, lo único que hará falta es escribir la palabra reservada classs, seguida del nombre de nuestra clase; para nombrarla, podremos utilizar casi todo tipo de valor alfanumérico; a continuación abriremos y cerraremos llaves. Todo lo que incluyamos dentro de estas llaves, será el contenido de nuestra clase.

class Vehiculo 
{

}

     El funcionamiento de una clase es muy parecido al de un array, sólo que en lugar de usar Clave => Valor, en una clase utilizaremos Propiedades.

     Si añadimos nuestra clase, a nuestro archivo de pruebas.php y guardamos los cambios, podremos comprobar que tendremos el mismo resultado, ya que nuestra clase todavía no tiene contenido y no provoca ningún error o cambio en al presentación de nuestro código actual.

  Qué son objetos y cómo podemos crearlos

      Los objetos son instancias de una clase, esto significa, que cuando tenemos una clase definida, podremos instanciar tantos objetos como nos hagan falta, utilzando como punto de partida, la clase que hemos definido.

     Para definir un nuevo objeto, lo único que tendremos que hacer es, una vez definida nuesta clase, añadiremos una variable con el nombre para nuestro objeto, y como valor de éste, agregaremos la palabra reservada new, seguida del nombre de nuestra clase y luego, abriremos y cerraremos paréntesis. Terminamos la definición de nuestro objeto, cerrando con punto y coma. 

     Provemos un ejemplo, vamos a crear el objeto de la clase Vehículo:

<?php

// Definimos la clase vehiculo
class Vehiculo
{

}

// Ejemplo de un objeto
$miNuevoVehiculo = new Vehiculo();

     Si añadimos nuestra clase, a nuestro archivo de pruebas.php y guardamos los cambios, podremos comprobar que tendremos el mismo resultado, ya que nuestro objeto todavía no tiene ninguna funcionalidad y, por lo tanto, no provoca ningún error ni cambio en el resto del código.

   Comparativa entre Array, Clase y Objeto

      Cuando trabajamos con Arrays (Arreglos), podemos añadir dentro de este cualquier tipo de dato, con la estructura Clave => Valor, pero no nos permitirá configurar un tipo de datos específico, para rellenar el apartado de los valores. Esto significa que no tendríamos control para evitar la inclusión de datos no permitidos que pudieran hacer fallar nuestra aplicación.

     El Array, al igual que la Clase, funcionan como una plantilla en blanco, donde podremos incluir varios datos.

     La gran diferencia de una Clase, con respecto al Array, es que dentro de la clase tendrá que registrarse previamente, todo lo que podrá ejecutarse dentro de ésta.

     Los Objetos, son estas instancias de la Clase, o sea, en la clase de definen las Propiedades y los Métodos, que estaremos autorizados a utilizar en cada nuevo objeto que vayamos creando, a partir de nuestra clase. 

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Ejemplo Gráfico sobre Clase y Objeto

       Imaginemos que somos vendedores de vehículos nuevos y usados, y que necesitaremos crear un programa en el que podamos registrar y actualizar fácilmente, todo nuesro inventario de vehículos. 

      Partiendo del gráfico y el contenido explicado anteriormente, en este ejemplo, crearemos nuestra Plantilla o Clase, a la que llamaremos Vehículo, y pondremos dentro todas sus Características, Propiedades de la clase.

     Una vez hayamos definido todos los elementos a los cuales podremos acceder, entonces sólo nos faltará crear las diferentes instancias de esta clase, que correspondería, a cada uno de los vehículos que iremos agregando o eliminando de nuestro inventario.

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Ahora que ya hemos entendido la diferencia entre Array, Clases y Objetos, es el momento de escribir código; así que en nuestro archivo de ejemplo crearemos dos instancias de la clase Vehiculo y lo imprimiremos en pantalla.

<?php

// Definimos la clase
class Vehiculo
{
  public $marca;
}

// Ejemplo de un objeto
$miNuevoVehiculo = new Vehiculo();
$miNuevoVehiculo->marca = 'Mercedes Benz';

// Imprimimos en pantalla nuestros primeros objeto
print "La marca de mi vehículo es: " . $miNuevoVehiculo->marca;

 

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Repasando: La diferencia fundamental entre un Array y una Clase, es que para comprobar los valores dentro de un array, tendríamos que ejecutar un vardump(); sin embardo, cuando trabajamos con Clases, ya sabremos su contenido, antes de que podamos incluso crear los objetos. Piensa en una clase como el esqueleto o esquema que debemos seguir, para obtener resutados coherentes en el desarrollo de nuestra aplicación.

     Otras de las ventajas de trabajar con Clases, es que dentro de ellas, podremos ejecutar funciones, también conocidas como Métodos. Eso lo explicaremos en el siguiente capítulo.

    Felicidades!!!, ya podrás presumir de que al menos conoces uno de los fundamentos de la Programación Orientada a Objetos, al definición de clases y la creación de Objetos a partir de ella; así que estás prepárate para el siguiente paso: Los Métodos

OOP | Configuración de proyecto con Lando

Video de Youtube
URL de Video remoto

Si no ves el video, puedes refrescar el navegador, presionando (Ctrl+Shift+R | Ctrl+F5 o Shift+F5), o abrirlo directamente desde el Canal de Youtube... HAZ CLIC AQUI

     Quiero darte la bienvenida a esta nueva serie de artículos y videos, donde trataré de explicarte los conocimientos básicos, sobre la Programación Orientada a Objetos en PHP, conocida también como OOP.

     La idea principal es darte un punto de partida, para que puedas comenzar a explorar y entender, el desarrollo de aplicaciones web mediante el uso de clases y objetos, a través de pequeños ejemplos prácticos, y de esta forma, ayudarte a entender el código en el que están basados, la mayoría de los Frameworks y CMS, como Symfony, Laravel, Drupal y Worpress, que se encuentran actualmente, en la mayoría de aplicaciones a las que tenemos acceso cada día.

     Para nuestros ejemplos, he optado por utilizar Lando, con un Recipe LAMP, ya que considero que es la forma más rápida y sencilla de configurar un entorno de desarrollo completo, sin importar el sistema operativo de tu ordenador.

     Si todavía no conoces Lando, es un sistema basado en contenedores de Docker, que nos ayuda a configurar entornos de desarrollo, estables y totalmente personalizables, facilitando enormemente el proceso de configuracion de servidores, así como la capacidad de compartir dicha configuración, entre todos los miembros de tu equipo de trabajo.

     Si quieres ver el video de instalación de Lando, HAZ CLIC AQUÍ

   Configuración de nuestro entorno de desarrollo con Lando

        Una vez hayamos realizado nuestra instalación de Lando, crearemos una carpeta en la que guardaremos todos los ejemplos, con los que iremos trabajando a través de esta serie de artículos y videos. En mi caso, he obtado por llamarla oop, pero puedes ponerle el nombre que prefieras. 

        Dentro de esta carpeta colocaremos dos arcihvos principales: index.php y functions.php

     Paso 1 - Creacion y configuración del servidor con Lando

        Antes de comenzar a trabajar con estos archivos, tendremos que inicializar Lando, con el comando lando init y luego seleccionaremos lamp, para que la instalación se correspondiente al servidor con Linux, Apache, Php y Mysql. Así, que una vez hallamos creado nuestra ca

lando init


      El resultado final de la inicialización para nuestro archivo será la siguiente:

? From where should we get your app's codebase? current working directory
? What recipe do you want to use? lamp
? Where is your webroot relative to the init destination? .
? What do you want to call this app? oop

     Si abrimos el archivo de configuración .lando.yml, el aspecto debería ser el siguiente:

name: oop
recipe: lamp
config:
  webroot: .

        Ahora que tenemos nuestro archivo de inicialización para Lando, listo para arrancarlo, pasaremos a crear nuestras páginas correspondientes.

   Paso 2 - Creación del archivo functions.php para las funciones

        Crearemos el archivo donde estarán alojadas nuestras clases, llamado functions.php, y pegaremos el siguiente código, que por ahora sólo tendrá una función que devuelve un array de arrays, con detalles relacionados a varios vehículos y sus detalles:

<?php

function get_cars(){
 return [
   'Mercedes' =>[
       'brand' => 'Mercedes Benz',
       'year' => 2020,
       'color' => 'blanco',
       'price' => 1500
   ],
     'Volvo' =>[
         'brand' => 'Volvo',
         'year' => 2019,
         'color' => 'azul',
         'price' => 1000
     ],
     'KIA' =>[
         'brand' => 'Kia',
         'year' => 2021,
         'color' => 'negro',
         'price' => 500
     ],
     'Ford' =>[
         'brand' => 'Ford',
         'year' => 2022,
         'color' => 'rojo',
         'price' => 850
     ],
    ];
}

     Explicación:

        Una de las formas de reutilizar nuestro código en PHP, al igual que en otros lenguajes de programación, es el uso de funciones, ya que podremos llamarlas desde cualquier lugar dentro de nuestro proyecto, evitando tener que repetir ciertos procedimientos. En esta ocasión, el objetivo de la función function get_cars(), es devolver un listado de vehículos, estructurados en forma de arrays asociativos, si quieres saber más sobre los Arrays, visita la página oficial de PHP.

   Paso 3 - Creación del archivo index.php

        En el archivo index.php, es donde mostraremos el listado de vehículos, que nos vendrá al importar los datos desde el archivo functions.php, por lo tanto, copiaremos el siguiente código:

<?php
require __DIR__ . '/functions.php';

$autos = get_cars(); ?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
</head>
<body>
<div class="container mt-5" style="background-color: #a5deea; border: 2px solid #071138;">
    <div class="d-flex flex-lg-column p-5 justify-content-center">
        <h1 class="p-2 bd-highlight text-center">Vehículos de ocasión</h1>
        <table class="table table-hover">
            <thead class="table-primary">
            <tr>
                <th scope="col">Marca</th>
                <th scope="col">Año</th>
                <th scope="col">Color</th>
                <th scope="col">Precio</th>
            </tr>
            </thead>

            <tbody>
            <?php foreach ($autos as $key => $auto): ?>
                <tr>
                    <td><?php echo $auto['brand']; ?></td>
                    <td><?php echo $auto['year']; ?></td>
                    <td><?php echo $auto['color']; ?></td>
                    <td><?php echo $auto['price']; ?></td>
                </tr>
            <?php endforeach; ?>
            </tbody>
            <tbody>
        </table>
    </div>
    <div class="d-flex flex-lg-column p-5 text-center bg-primary text-white mb-5">
        <?php
        if (!isset($_POST['submit'])) {
            echo "<h3>Selecciona el vehículo que quieres comprar</h3>";
        } else {

            $name = $_POST['vehicle_name'];
            echo "Haz seleccionado un vehículo de la siguiente marca : <h2 class='p-3 mt-3'> $name </h2>";
            echo "<br>Puedes cambiar tu selección, haciendo clic en el selector nuevamente";
        }
        ?>
        <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            <div class="d-flex flex-row justify-content-center p-5">
                <select style="max-width: 300px; border: 1px solid #fff"
                        class="form-select center-block form-control btn drp-dwn-width btn-default btn-lg dropdown-toggle mb-5"
                        name="vehicle_name">
                    <option value="">Selecciona aquí tu vehículo</option>
                    <?php foreach ($autos as $key => $auto): ?>
                        <option value="<?php echo $key; ?>"><?php echo $auto['brand']; ?></option>
                    <?php endforeach; ?>
                </select>
            </div>
            <input class="btn btn-warning" type="submit" name="submit" value="Comprar"><br>
        </form>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
        crossorigin="anonymous"></script>
</body>
</html>

     Explicación:

        Lo primero que vemos en este archivo, es que, a pesar de tener la extensión .php, en su interior encontraremos un híbrido entre código php y html; esta combinación será la que nos permita extraer los valores de php desde el archivo functions.php y mostraros en el formato html.

        Por esta razón, al principio del archivo, lo primero que debemos verificar, es que hemos incluido esta dependencia, para ello hemos utilizado la directiva require, acompañada de los parámetros de la ubicación de nuestro archivo functions.php:

require __DIR__ . '/functions.php';

        Justo debajo de esta línea, hemos declarado una variable de php, a la cual llamamos $autos y, a continuación, le hemos asignado el valor de nuestra función, permitiéndonos extraer toda la información incluida en su interior.

$autos = get_cars(); ?>

        Por último, tenemos el apartado donde imprimimos todos los valores dentro del array, para que se muestren en la tabla de vehiculos de ocasión, mediante un bucle foreach:

<tbody>
<?php foreach ($autos as $key => $auto): ?>
    <tr>
        <td><?php echo $auto['brand']; ?></td>
        <td><?php echo $auto['year']; ?></td>
        <td><?php echo $auto['color']; ?></td>
        <td><?php echo $auto['price']; ?></td>
    </tr>
<?php endforeach; ?>
</tbody>

   Paso 4 - Arrancar el servidor con el comando de Lando

     Una vez hayamos guardado los cambios correspondientes, podremos arrancar lando y accederemos la url que se nos generará utomáticamente, donde veremos una pequeña aplicación, con un listado de vehículos y un formulario, para realizar una compra ficticia, que sólo es un select dentro de un formulario y se imprime el valor seleccionado en pantalla:

lando start

 

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Paso 5 - Comprobación en el navegador

        En cuanto tengamos el servidor funcionando, podremos hacer clic en los enlaces que se nos mostrarán en pantall, al terminar de ejecutarse el anterior comando lando star, y entonces, si hacemos clic sobre uno de ellos, o copiamos en el navegador una de las direcciones, deberíamos ver en pantalla, nuestra aplicación para pruebas, funcionando correctamente con un aspecto parecido al de la siguiente imagen:

     Ahora que ya tenemos configurada nuestra aplicación de pruebas, podemos comenzar a optimizarla utilizando las clases y objetos de php... ¡Adelante!

OOP - Programación Orientada a Objetos | Presentación

Video de Youtube
URL de Video remoto

Si no ves el video, puedes refrescar el navegador, presionando (Ctrl+Shift+R | Ctrl+F5 o Shift+F5), o abrirlo directamente desde el Canal de Youtube... HAZ CLIC AQUI

     En esta serie de videos trataré de explicarte, los conocimientos básicos sobre la programación con PHP Orientada a Objetos (OOP). Mi idea es incluir varios ejemplos prácticos donde aprenderás a diferenciar entre Clases y Objetos, Propiedades y Métodos, Inyección de dependencias, creación de una API, entre otros.