Documentos de Académico
Documentos de Profesional
Documentos de Cultura
sintaxis de un closure:
$maxMount = 15;
$filtro = fuction($job) use($maxMount) {
return $job["months"] > $maxMount;
}
Cuando usarlos:
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.
La biblioteca SPL
Iteradores:
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
phpinfo() -> Es una funcion que sirve para desplegar toda la informacion de
servidor, para que lo podamos ver
* 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.
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:
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
Emails
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.
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