Crea un nuevo proyecto Symfony vacío
php composer.phar create-project symfony/framework-standard-edition demo/ 2.4.1
cd demo
Genera un nuevo paquete
(por ejemplo src/Company/DemoBundle
)
php app/console generate:bundle
cd src/Company/DemoBundle/
Inicie su repositorio de github en src/Company/DemoBundle
git init
touch README.md
git add .
git commit -m "initial commit"
git remote add origin https:
git push -u origin master
Agregar un archivo composer.json
src/Company/DemoBundle/composer.json
:
{
"name" : "company/demobundle",
"description" : "A demo bundle",
"type" : "symfony-bundle",
"authors" : [{
"name" : "demo",
"email" : "[email protected]"
}],
"keywords" : [
"demo bundle"
],
"license" : [
"MIT"
],
"require" : {
},
"autoload" : {
"psr-0" : {
"Company\\DemoBundle" : ""
}
},
"target-dir" : "Company/DemoBundle",
"repositories" : [{
}],
"extra" : {
"branch-alias" : {
"dev-master" : "some_version-dev"
}
}
}
Ahora tienes la estructura base de tu paquete
Úselo en otro proyecto
composer.json:
[...]
"require" : {
[...]
"company/demobundle" : "dev-master"
},
"repositories" : [{
"type" : "vcs",
"url" : "https://github.com/Company/DemoBundle.git"
}],
[...]
Hacer:
curl -sS https:
php composer.phar update company/demobundle
aplicación / AppKernel:
new Company\DemoBundle\CompanyDemoBundle(),
Trabajar en ello
- Puede clonar su DemoBundle en la
src/Company
carpeta y luego instalarlo manualmente
- Puedes usar un enlace simbólico
Conclusión
Puede desarrollar y probar su paquete en su primer proyecto y usarlo con github y composer en su segundo proyecto.
sf2
proyecto yclone
este repositoriosrc/
? ¿Qué pasacomposer.lock
con el proyecto principal y usarlo para asegurar la misma versión de cada biblioteca en todo el equipo? Si conoce una forma buena y eficaz de hacerlo, agréguela a su respuesta. ¡Gracias! :)Un punto importante que debe saber es que puede comprometerse con su repositorio desde / vendor. De hecho, composer crea un segundo control remoto llamado "composer" para cada paquete (o paquete) que hace referencia al repositorio del paquete, para que pueda trabajar en él en un contexto de trabajo. Entonces, la buena práctica es registrar su paquete en su composer.json para todos sus proyectos y comprometerse desde su
/vendor/MyCompany/MyBundle
, desde cualquier proyecto.Como prueba, simplemente ejecute
git remote -v
desde cualquier paquete de su proveedor.La mala práctica sería considerar su paquete como un proyecto separado y tener enlaces simbólicos con él. La razón principal por la que esta es la mala práctica es que no podrá declarar dependencias con su paquete. Además, tendrá algunas dificultades con el despliegue de sus proyectos.
fuente
/src
o en el/vendor
directorio al inicio? Cuando incluya este paquete en otro proyecto en el que estará,/vendor
pero ¿dónde debería generarlos al principio?composer update
. Ahora debería ver su paquete vacío en la carpeta del proveedor y puede trabajar en él. Si desea que su paquete sea público, agréguelo a Packagist.En Symfony4, el
generate:bundle
comando ya no está disponible. En su lugar, puede seguir este tutorial .Primero crea un proyecto con:
composer create-project symfony/website-skeleton my-project
Luego, crea un
my-project/lib/AcmeFooBundle/src
directorio. Aquí vivirá tu paquete. El espacio de nombres para este directorio seráAcme\AcmeFooBundle
, por lo que si crea una clase de servicio enlib/AcmeFooBundle/src/Service/Foo.php
, su espacio de nombres seríaAcme\AcmeFooBundle\Service
.Ahora necesitamos decirle al autocargador del compositor que busque nuevas clases en ese nuevo directorio, así que necesitamos editar la
composer.json
autoload
sección:"autoload": { "psr-4": { "Acme\\AcmeFooBundle\\": "lib/AcmeFooBundle/src/", } },
y corre
composer dump-autoload
.Ahora solo necesita agregar su clase de paquete a
config/bundles.php
:return [ ... Acme\AcmeFooBundle\AcmeFooBundle::class => ['all' => true], ];
e inyección de dependencia para cargar la configuración desde su paquete.
Si desea verificar sus servicios antes de agregar la inyección de dependencia, puede conectarlos automáticamente en
config/services.yml
:Eso es todo. Siga las mejores prácticas y continúe codificando.
PD: publiqué una publicación con algunos consejos para desarrollar paquetes reutilizables de Symfony .
fuente