Hoy, vamos a ver cómo crear un transporte de correo electrónico personalizado con Symfony Mailer. Para el ejemplo, crearemos un transporte llamado “pt”. Prerrequisitos Antes de comenzar, asegúrate de haber instalado y configurado Symfony Mailer y HttpClient en tu proyecto. Puedes añadirlos a tu proyecto utilizando los siguientes comandos:
composer require symfony/mailer
composer require symfony/http-client
Creando la Clase de Transporte Lo primero que debemos hacer es crear...
Para concluir este mini archivo técnico sobre la interfaz de funciones foráneas de PHP, me propuse simplemente conectarme a una librería. Un tipo de desafío que podría al mismo tiempo ayudarme a progresar en el tema. Así que tuve que idear una idea de proyecto. Algo no demasiado pequeño o simple pero tampoco demasiado grande. Fallé, encontré una idea pero resulta ser mucho más compleja de lo que imaginé. No importa, aun así lo intenté. Así que para nuestro artículo, pensé que intent...
No es raro tener múltiples bases de datos para un solo
proyecto. Normalmente, cuando se usan dos bases de datos, las
entidades pueden organizarse en directorios específicos que se
declaran en tu configuración. En este caso, el sistema utilizará
la conexión configurada para el directorio de la entidad. Puedes
ver un ejemplo de múltiples conexiones aquí Symfony
4 / Sonata: gestionando una interfaz de administración
multi-servidor
Supongamos que querem...
Está bien, eres como yo. Tu máquina no tiene nada instalado localmente. ¡Ni siquiera composer ni PHP en CLI!Aunque uses PHP y quizás incluso Symfony (o no), necesitas utilizar composer diariamente. Usas PhpStorm todos los días y piensas que es una lástima no aprovechar todas las opciones de tu IDE, especialmente todo lo relacionado con composer y la consola de Symfony. Entonces, ¿cómo configuras PhpStorm para especificar que el composer de tu proyecto se encuentra en la imagen de docker?Aquí ...
Siguiendo el artículo escrito por Thomas Bourdin SYMFONY / SONATA: AÑADIENDO UNA FUNCIÓN DE CLONACIÓN A UN CRUD, vamos a mostrar cómo, de manera muy simple, podemos añadir acciones personalizadas a una interfaz. En el Tablero:
Pero también vamos a ver cómo personalizar de manera simples y genérica las acciones personalizadas del listado, el encabezado de su CRUD y finalmente cómo añadir acciones para el procesamiento por lotes. Para mi ejemplo, comencé con una tabla muy simple llamada...
Configuración de PHP/Docker Si estás desarrollando con Symfony, instalado en un docker compose y aún no utilizas el depurador, entonces este artículo es para ti. Vamos a mostrarte cómo preparar tu entorno para que ya no tengas que hacer dd() o var_dump. Una vez que hayas experimentado las alegrías de depurar, no podrás prescindir de ello, ya que aumentará enormemente tu comodidad. Para este artículo necesitas tener una aplicación Symfony alimentada por apache/php (o nginx y fpm, no importa) ...
¿Qué es Composer? Así como NPM es para JavaScript, Composer es la herramienta dedicada para PHP que te permite gestionar las dependencias de librerías para tus aplicaciones. Si has utilizado un framework como Symfony, definitivamente lo has usado. En realidad, todo desarrollador de PHP lo usa a diario. Si estás en esta página, probablemente te estés preguntando cómo crear una librería que pueda ser fácilmente redistribuida y compartida con la comunidad. Eso es lo que intentaré mostrarte. Para...
Aquí hay una pregunta que recientemente consideré. Normalmente, instalo herramientas de control de calidad (QA) directamente en mi máquina anfitriona o en la imagen de Docker. Si las herramientas están instaladas en mi máquina anfitriona, no hay problema en configurar PhpStorm. Si las herramientas están directamente configuradas en la imagen de Docker, tampoco hay problema en usarlas dentro de la imagen. Sin embargo, ¿cómo se puede combinar el poder de PhpStorm y Docker para vincular los dos?...
Si tienes una necesidad específica de transformar datos entre el formulario y el registro de tu entidad y piensas que este código de transformación debería ubicarse en un servicio porque tiene más sentido, puedes utilizar el dataMapper utilizando la inyección de dependencias proporcionada por Symfony. ¿Pero cómo implementarlo?Un pequeño recordatorio sobre el DataMapper. Si estamos de acuerdo con la documentación oficial de Symfony respecto a DataMapper y DataTransformer, un dataMapper tiene l...
En este ejemplo, tomaremos el caso concreto de una interfaz simple que incluye múltiples elementos. Hemos elegido usar una tabla de "Proyectos" en la que asignaremos documentos. Por lo tanto, para un proyecto, podemos asignar varios documentos. Y para facilitar la administración, nos aseguraremos de que podamos gestionar nuestra interfaz anidada directamente dentro de la vista de edición de nuestro proyecto.Necesitamos crear el esquema. En primer lugar, importamos nuestro esquema actual en My...
Con Stéphane Péchard https://www.linkedin.com/in/stephanepechard/, experto en Android y gurú de KMP, nos preguntamos si sería factible desarrollar un algoritmo bajo KMP y ejecutarlo directamente en PHP. Las especificaciones eran simples: el desarrollador de Android (Stéphane) me proporciona un archivo de cabecera, un archivo .so y yo me encargo de él. Con el archivo de cabecera, el contrato, deberíamos poder idear algo... Así que logramos hacer nuestra llamada a la función...
El CallbackDurante la preparación de este artículo, noté que muchos recursos en internet usan directamente el libc para sus ejemplos. Puedes encontrar fácilmente ejemplos bastante demostrativos y sencillos. Pero para hacer algo genial y original, pensé "vamos a encontrar algo para mostrar con este libc también". Después de todo… si solo es pasar una estructura como la mayoría de los ejemplos, no será útil. Y luego encontré una función en un foro donde la g...
¿Llamando directamente a la biblioteca de PHP?¿Qué tal si nos divertimos escribiendo un fragmento de código que es inútil? ¡Vamos! ¡Vamos! ¡Vamos!Está bien, de acuerdo. Propongo que hagamos algo inútil utilizando PHP para llamar a una biblioteca de C que usa el Zend Engine.De hecho, este párrafo no es tan inútil como parece. Su propósito es mostrarte un comportamiento particular 😊PHP-FFI tiene algunas limitaciones: no puedes pasar una variable de PHP directamente para recuperar su valor dinám...
IntroducciónDesde la versión 7.4 de PHP, finalmente tenemos acceso a funciones de interoperabilidad entre diferentes lenguajes y PHP: FFI o Interfaz de Función Externa.¿Qué es FFI? Es simplemente la capacidad de utilizar una biblioteca externa (.dll o .so) directamente en PHP, sin tener que crear una extensión de PHP. ¡Sí, con solo un script de PHP! Es, entre otras cosas, lo que ha hecho que Python sea tan famoso y le haya permitido tener tantas características.Lo grandioso de FFI es que un ...
Hemos visto en artículos anteriores cómo inicializar un proyecto Symfony 6 + Sonata 5 con multimedia y usuarios en un admin seguro. Luego, analizamos cómo gestionar las localizaciones de usuarios.Ahora veremos cómo instalar y gestionar clasificaciones. Procedemos con la instalación de la última versión hasta la fecha.
php8.1 composer.phar require sonata-project/classification-bundle:5.x-dev
Al parecer, tenemos un error de configuración.
Unrecognized option "media" under "sonata_clas...
En un artículo anterior vimos cómo instalar Symfony 6 + Sonata Admin 5 con gestión de usuarios y medios. Continuaremos con esta instalación con la configuración de idiomas y zonas horarias. Instalaremos intlBundle que permite gestionar la visualización localizada.
php8.1 composer.phar require sonata-project/intl-bundle
Aprovechamos esta oportunidad para agregar un campo de zona horaria y localidad al usuario.Para hacer esto, extenderemos userBundle y agregaremos un campo en el admin. Ex...
Aquí veremos cómo crear una segunda interfaz mientras la entidad ya está en uso en una interfaz CRUD.El problema con las interfaces generadas automáticamente es que utilizan el nombre de la entidad para construir las rutas.Si configuramos una segunda interfaz con una entidad que ya se está utilizando, terminaremos con la misma ruta que la primera.
Para abordar este problema, utilizaremos estos dos parámetros en nuestra clase de administración para sobrescribir los valores predeterminados.Sup...
Veremos cómo configurar una interfaz de administración multilingüe con un botón de selección de idioma (conmutador de idioma).Instalación de translationBundle
composer require sonata-project/translation-bundle
bin/console assets:install
El conmutador de idioma requiere un filtro twig específico.De lo contrario, obtendrás un error como:Unknown "language_name" filter.Luego, necesitas instalar estos dos paquetes
composer require twig/intl-extra
composer require twig/extra-bundle
bin/console cac...
Veremos cómo gestionar una interfaz de administración que se conecta a múltiples servidores.En nuestro ejemplo, hemos configurado un servidor MySQL predeterminado que gestiona nuestra interfaz de administración. Usuarios, medios, etc.Y hemos configurado un servidor PostgreSQL que contiene una tabla que deseamos gestionar.Podemos agregar tantos servidores como deseemos.Nuestro Servidor MySQLTradicionalmente hemos configurado una instancia de Symfony Sonata por defecto con una conexión clásica ...