Está en la página 1de 5

Las funciones anónimas, también conocidas como cierres (closures),

permiten la creación de funciones que no tienen un nombre especificado.

sintaxis de un closure:

$maxMount = 15;
$filtro = fuction($job) use($maxMount) {
return $job["months"] > $maxMount;
}

Desde PHP 5 es posible utilizar el type hinting, o la determinación de tipos,


que permite especificar el tipo de datos que se espera de un argumento en la
declaración de una ** función**. Cuando se llama a la función, PHP comprobará
si los argumentos son del tipo especificado, y si no lo son se emitirá un
error y la ejecución se detendrá.

Cuando usarlos:

Cuando queremos forzar a una función a aceptar sólo argumentos de un tipo.


Su uso más común es con objetos, indicando el nombre de la clase:

public function postLogin(ServerRequest $request){}

Traits

Es importante saber que aunque se está intentando usar el patrón de diseño MVC,
normalmente no todo se tiene exclusivamente en estas 3 carpetas; podemos tener
más carpetas pero teniendo en cuenta el mantener el código siempre bien
organizado.
Un trait se declara creando un nuevo archivo, muy parecido a una clase pero en
vez de class se utiliza la palabra trait. Para que una clase utilice un trait,
se deberá usar dentro de la clase la palabra use y el nombre del trait.
Lo interesante de hacer traits en vez de poner el código directamente en una
clase, es que esta funcionalidad podría servir para otras clases que no están
relacionadas entre sí.
Un trait puede ser implementado en tantas clases como queramos.

Third party Traits - Soft Delete

Soft Delete es una técnica de programación en la cual no borramos realmente


los registros en la base de datos sino que únicamente los marcamos como
borrados para que ya no sean mostrados en nuestras vistas o en las consultas
de usuarios. Al implementar un soft delete tendrás que usar algo en tu base
de datos que te permita definir que estás trabajando con soft deletes. Podrías
usar una bandera o un datetime que te marque la fecha en la que fue borrado.

El hecho de si usar soft deletes es una buena práctica o no es discutible y


depende de tu caso de uso. Usarlo si es necesario y tiene sentido como en
sistemas de facturas o reportes.

Usando el trait de Eloquent, cuando tengas registros que tienen el campo de


“deleted_at” llenos, quiere decir que están borrados; si el campo está vacío
quiere decir que no han sido borrados.
Para usar este trait es necesario crear un campo en nuestra base de datos
llamado “deleted_at” el cual será tipo “DATETIME”.
El borrado físico también puede ser llamado hard delete o borrado permanente.
Como un soft delete no borra físicamente, podemos igualmente consultar esta
información.
withTrashed es un método que modificará la consulta para que traiga los
registros borrados con soft delete.
Dependiendo de nuestra aplicación, podemos tener vistas en las que se vean los
registros borrados (mayormente se usa en áreas de admin) y tener otras vistas
donde no se reflejen estos registros.

La función var_dump() en PHP muestra el tipo de variable y su contenido, en el


caso de los arrays muestra el tipo de contenido de cada camo.

La biblioteca SPL

La biblioteca SPL (Standard PHP Library) es un conjunto de Clases e Interfaces


para PHP que fue diseñada para ayudarnos con nuestras aplicaciones. SPL se
distribuye directamente con PHP desde su versión 5.0 y aunque no es obligatorio
usarla, el aprender de ella te permitirá tener un mejor código, más robusto y
también más orientado a objetos.

Uno de los puntos más usados en el pasado fue la función spl_autoload_register


que nos permitía indicar a nuestro código la forma en la que haríamos el
autocargado de clases, obviamente esto ya no es tan usado (al menos ya no lo
hacemos de forma manual) debido a que podemos solucionar el problema usando
composer, pero en su momento fue una herramienta muy popular y usada dentro de
las aplicaciones PHP.

Además de spl_autoload_register, SPL nos ofrece otras herramientas muy


interesantes para nuestro código:

Iteradores:

Los iteradores sirven para recorrer conjuntos de elementos. Un iterador es


un objeto que sirve para recorrer algo. En esta area SPL nos ofrece muchas
clases nuevas que mejoran drásticamente la forma en la que escribimos código,
entre las clases más populares nos encontramos con ArrayIterator que sirve
para recorrer arreglos optimizando la memoria usada por el sistema y
DirectoryIterator que nos permite recorrer los archivos y las carpetas
de una ubicación.

En caso de que ninguna clase cumpla con lo que queremos hacer, SPL también nos
ofrece ciertas interfaces que nos permitirán mejorar la forma en la que
usaremos nuestros objetos, por ejemplo podemos implementar la Interfaz
Iterator si queremos que nuestro objeto pueda ser iterado o podemos
implementar la interfaz ArrayAccess si queremos usar la sintaxis de acceso a
elementos tipo arreglo en nuestros objetos, por ejemplo $object[0].

Estructuras de Datos

Los arrays dentro de PHP son muy versátiles, sin embargo es verdad que no
solucionan todas las funciones que a veces necesitamos, en lugar de que
intentemos forzar la forma en la que usamos los arrays, una buena idea
siempre será echar un ojo a las estructuras que SPL nos ofrece.

Entre las estructuras más usadas dentro de SPL podemos encontrar listas,
pilas y colas, las cuales sin lugar a dudas darán mucha más claridad a lo
que estamos intentando resolver dentro de nuestra aplicación.

Excepciones

A la hora de enviar excepciones para indicar que ocurrió un error, la forma más
sencilla de hacerlo es utilizando la clase Exception, sin embargo SPL nos
ofrece una variedad mayor de excepciones, las cuales podemos aprovechar para
tener un mejor control de los errores que ocurren en nuestra app.

Por ejemplo LogicException y sus derivadas indican que se encontró un error que
probablemente es culpa de nosotros como programadores, algo estamos haciendo
mal y debemos tratar de evitar que esto llegue a producción.

Por otro lado RuntimeException y sus derivadas nos indican que algo pasó y no
teníamos control de eso durante el desarrollo, por ejemplo una conexión
interrumpida a la base de datos o algún archivo al que no podemos acceder, y
aunque esto podría pasar en producción, el controlar bien las excepciones nos
permitirá al menos tener una falla más amigable y no mostrar al usuario una
horrible pantalla con datos de nuestro código.

Algo que también puedes hacer es extender de estas clases y crear tus propias
excepciones, de este modo podrás tener aun más información acerca de los que
pasa en tu proyecto.

Siempre trata de enviar la excepción que más claramente indique lo que sucedió,
esto no hará tu control de errores más sencillo, pero sí te ayudará a entender
las causas de los errores que aparecen en tu código.

Conclusión

Revisa la documentación oficial de SPL donde además de la forma de uso, también


encontrarás muchos ejemplos y aportes de la comunidad. Estoy seguro de que una
vez que conozcas todo lo que SPL te puede ofrecer, tu experiencia programando
con PHP mejorara muchísimo.

phpinfo() -> Es una funcion que sirve para desplegar toda la informacion de
servidor, para que lo podamos ver

Trabajando con Monolog

* Los mensajes de error que irán al log se pueden añadir a mano de manera
personalizada.
* $e->getMessage() se usa para obtener el mensaje exacto que tiene una excepción.
Esto es útil para separar el tipo de errores.
* Al utilizar dotenv y las variables de entorno, el valor “true” viene como cadena.
* El orden de los middleware es muy importante porque en ese orden se irán
recorriendo las capas.

Migraciones de bases de datos

Cuando cambiamos el proyecto y tuvimos una nueva base de datos, toda nuestra
información se perdió y no era muy sencillo saber cuál era la estructura que
debía tener. Esto puede pasar por cambiar de entorno, cambiar de máquina u
otras razones y en estos casos es importante no tener que construir la base de
datos desde 0 siempre y más si se tienen muchas tablas y condiciones.
Aquí es donde entra en juego la migración de bases de datos la cual nos permite
crear ciertos archivos y llevar un control sobre cómo va cambiando por si en un
futuro cambiamos de máquina o entorno, podremos recrearla de manera sencilla.

Usaremos un proyecto llamado Phinx que fue utilizado en CakePHP el cual una vez
instalado y usando el comando vendor/bin/phinx podremos ver la documentación y
ayuda acerca de cómo funciona este sistema. Nosotros nos centraremos en:

create: Comando para crear una nueva migración.


init: Inicializará nuestra app para poder usar migraciones.
migrate: Ejecuta las migraciones en nuestra base de datos.
rollback: Deshace una migración.
En el archivo phinx.yml encontramos las rutas donde existirán las migraciones,
con sus nombres y diferentes configuraciones en caso de que queramos poder
tener la base de datos en diferentes entornos.

Al crear una tabla, su nombre deberá tener el formato que tienen los nombres de
clase (con las mayúsculas iniciales) porque a la final lo que hará Phinx será
formar una clase.

Comandos

Al estar trabajando en una aplicación de PHP, existen circunstancias en las que


debemos hacer cosas que no necesariamente están dentro del navegador como
ejecutar tareas asíncronas para que el usuario no tenga que esperar mucho.
Para esto usamos los comandos que son aplicaciones de PHP que vamos a correr
en la consola. Phinx es una aplicación de PHP diseñada para correr sobre
la consola.

Symfony componentes es la parte de Symfony que nos permitirá crear muchos


comandos y tener una interfaz amigable para usarlos.

La línea de inicio #!/usr/bin/env php indica a la terminal hacia dónde debe ir


la ejecución.

Emails

Para enviar los correos electrónicos utilizaremos la librería Swiftmailer que


también es usada por Symfony.
Existen varias maneras de enviar correos pero lo más común es usar el protocolo
SMTP; podemos trabajar con nuestras cuentas propias pero para producción es
recomendable usar servicios especializados. mailtrap.io nos sirve para probar
correos electrónicos.
Puedes crear una cuenta gratuita en mailtrap la cual te permitirá tener una
bandeja de entrada que puedes usar y en la parte del engranaje está la
configuración y verás los datos SMTP.

Al enviar el formulario, se tarda un cierto tiempo en dar una respuesta porque


se conecta a un servicio de terceros. Esto es muy común y lo problemático es
que estamos bloqueando al usuario y éste no sabrá qué está pasando. Por esto
mismo crearemos un proceso asíncrono para guardar los datos, darle respuesta al
usuario y posteriormente hacer el envío.

Async tasks

Existen procesos que queremos ejecutar pero no queremos que el usuario se quede
esperando por una respuesta. En muchos casos esos tiempos de espera serán muy
grandes dependiendo del tamaño de los archivos.
La mejor solución es darle una respuesta inmediata al usuario como “Recibimos
tu archivo, te enviaremos un correo cuando lo procesemos” y en otro proceso
estaremos trabajando con el archivo y al finalizar enviaremos el correo. A esto
lo llamamos tareas asíncronas.

Procesar tareas asíncronas

Es necesario lograr que el envío de correos se haga de manera automática pues


no sería sostenible llamar comandos de manera manual. Para esto existe el Cron
Job disponible en Linux y Unix que nos permite ejecutar una tarea cada cierto
tiempo.
https://crontab.guru nos ayudará a traducir lo que necesitamos poner en el
Cron.

Dentro de Linux todos los procesos que están corriendo son conocidos como
servicios y cuando queremos recargarlos es necesario reconfigurar y reiniciar.

Security
Es recomendado que trabajes siempre con las versiones más recientes de lo que
estés usando, como lenguajes, frameworks o bases de datos. Si es necesario que
mantengas una versión anterior, revisa si hay parches de seguridad disponibles
ya que lo más probable es que los desarrolladores sigan implementando estas
mejoras.
Uno de los mayores problemas en la aplicación web es la falta de validaciones
por el lado de los programadores (nosotros), como manipulación de ID’s o en el
momento de autenticar, dando pie a dar información sobre los usuarios a los
atacantes.
Existe un proyecto llamado OWASP que ayuda a identificar, catalogar y nos
brinda herramientas que podemos utilizar para mejorar las aplicaciones.
Esto aplica para otros lenguajes de backend. En su top 10 tendremos las
vulnerabilidades que más han surgido en el año.
Si vas a mantener datos de usuarios, al momento de ir a producción es
importante usar conexiones seguras HTTPS ya que esto bloquea el acceso de los
atacantes al momento de los clientes conectarse al servidor web.

Security Examples

* pdo viene de PHP Data Object y son las librerías base con las que se comunica
PHP y un motor de base de datos. Eloquent encapsula esta información y nos
genera una capa superior que nos permite comunicarnos con la base de datos
usando buenas prácticas.
* Confiar en lo que el usuario escribe es un error al desarrollar porque puede
haber atacantes que buscan obtener información que no les corresponde.
* En pdo existen las sentencias preparadas que creará el query con placeholders
que luego se cambiarán por los valores reales, escapando la información y
evitando SQL Injection. Lo importante es que cuando trabajes con entradas de
usuario, valides siempre.
* Un ataque XSS es un ataque en el que alguien trata de inyectar código en
nuestra aplicación. Chrome cuenta con un auditor que evita estos ataques pero
sólo a partir de una versión avanzada.
* strip_tags y htmlspecialchars van a escapar los caracteres HTML evitando
ataques XSS

También podría gustarte