Symfony 4: Crear un bundle local que vaya a la carpeta vendor
1. Crear nuevo bundle en Symfony 4
2. Creamos el archivo composer.json
3. Configurar el repositorio de composer en Symfony 4 para una carpeta local
1. Crear nuevo bundle en Symfony 4
Symfony 4 no cuenta con la herramienta generate bundle y aunque se puede instalar con haciendo un require de sensio/generator-bundle, en principio no es compatible con esta versión de symfony así que nosotros lo vamos a hacer a pelo.
Nuestro bundle estará alojado en una nueva carpeta raíz de symfony aunque al finalizar lo requeriremos con composer y lo copiará a la carpeta vendor.
Vamos a crear una carpeta llamada custom-bundles por ejemplo y dentro de esta colocaremos todos nuestros bundles personales, en este ejemplo nuestro bundle se llamará AcmeBundle:
$ mkdir -p /ruta/proyecto/symfony/custom-bundles/acme-bundle
Dentro de la carpeta acme-bundle, crearemos un archivo php con el mismo nombre del bundle AcmeBundle.php, meteremos el código base del bundle que sigue, cambiando los nombres por los que necesitemos.
<?php
namespace Kimerikal\AcmeBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeBundle extends Bundle { }
Lo añadirmos config/bundles.php de la siguiente forma:
return [
....
Kimerikal\AcmeBundle\AcmeBundle::class => ['all' => true]
]
Con esto ya tendríamos creada la base de nuestro bundle aunque para que funcionara tendría que estar dentro de la carpeta src, como nuestra intención es poder reutilizarlo en otras aplicaciones vamos a tener que configurar algunas cosas más.
2. Creamos el archivo composer.json
Para poder importarlo a la carpeta vendor y que el autoload pueda ver nuestro nuevo espacio de nombres necesitamos el archivo composer.json en la raíz de nuestro bundle. Si aún no tienes instalado composer puedes echar un ojo a este tutorial: https://www.kimerikal.com/wiki-post/47/instalar-composer-en-macos
Con un terminal entramos a la carpeta custom-bundles/acme-bundle/ y tecleamos el siguiente comando:
$ composer init
Con este comando nos hará algunas preguntas para la configuración de composer:
Package name (/) [usuario/acme-bundle]: kimerikal/acme-bundle
Description []: Un bundle de prueba para symfony 4
Author [, n to skip]: Kimêrikal
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []: symfony-bundle
License []: MIT
Es importante que type sea symfony-bundle.
Con esto bastaría de momento, podemos por ejemplo meter algún require como la versión de php mínima y despues generar el archivo.
Ahora editamos directamente el fichero para añadir algunos elementos como el autoload y la versión.
"autoload": { "psr-4": { "Kimerikal\\AcmeBundle\\": "" }, "exclude-from-classmap": ["/Tests/"] }, "extra": { "branch-alias": { "dev-master": "1.x-dev" } }
Al final la cosa quedaría así:
{ "name": "kimerikal/acme-bundle", "description": "Un bundle de prueba para symfony 4", "type": "symfony-bundle", "license": "MIT", "authors": [ { "name": "Kimêrikal", "email": "hola@kimerikal.com" } ], "minimum-stability": "dev", "require": { "php": "^7.1.3" }, "autoload": { "psr-4": { "Kimerikal\\AcmeBundle\\": "" }, "exclude-from-classmap": ["/Tests/"] }, "extra": { "branch-alias": { "dev-master": "1.x-dev" } } }
3. Configurar el repositorio de composer en Symfony 4 para una carpeta local
Si queremos que el bundle esté disponible desde un repositorio git o svn privado nos olvidamos de este paso y seguimos la siguiente guía: https://www.kimerikal.com/wiki-post/50/symfony-4-asociar-un-bundle-propio-con-un-repositorio-git-privado
Con esto ya casi hemos acabado, sólo nos quedaría decirse a nuestro symfony que tenemos nuestro bundle en la carpeta custom-bundles para que composer pueda copiarlo a en la carpeta vendor. Para ellos editamos el composer.json, esta vez el de la raíz de symfony, NO el del bundle.
Añadimos lo que sigue al final de proyecto-symfony/composer.json
"repositories": [ { "type": "path", "url": "custom-bundles/acme-bundle" } ]
Ya sólo nos quedaría hacer un composer require y veremos como nuestro nuevo bundle se copia en la carpeta vendor:
$ composer require kimerikal/acme-bundle:*@dev
Con esto ya estaría listo nuestro bundle configurado, nos queda la parte más complicada…Desarrollar su funcionalidad.