Pregunta Symfony2: crear un paquete de proveedores propios: estrategia de proyecto y git


Estamos considerando crear nuestro propio common paquete para asignación de entidades y servicios para su uso dentro de algunas aplicaciones separadas. Un paquete debe ser fácil de modificar, ejecutar, incluir y probar. Se acerca de Mejores prácticas para la estructuración de paquetes, pero no sé qué git estrategia para usar cuando se trata de desarrollo.

Deberíamos crear common agrupar como un proyecto completo y comprometer todo el repositorio a nuestro servidor git, o es mejor iniciar el control de fuente solo para la raíz de common agrupar y empujar solo sus contenidos? Veo este enfoque en paquetes disponibles en github, pero no sé manera fácil y cómoda de desarrollar paquetes de esa manera.


74
2018-02-03 09:19


origen


Respuestas:


Crea un nuevo proyecto de 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/

Inicia tu repositorio github en src/Company/DemoBundle

git init
touch README.md
git add .
git commit -m "initial commit"
git remote add origin https://github.com/YourAccount/DemoBundle.git
git push -u origin master

Agregue un archivo composer.json

src/Company/DemoBundle/composer.json:

{
    "name" : "company/demobundle",
    "description" : "A demo bundle",
    "type" : "symfony-bundle",
    "authors" : [{
        "name" : "demo",
        "email" : "demo@company.com"
    }],
    "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://getcomposer.org/installer | php
php composer.phar update company/demobundle

aplicación / AppKernel:

new Company\DemoBundle\CompanyDemoBundle(),

Trabajar en ello

  • Puede clonar su DemoBundle en src/Company carpeta, luego instálelo manualmente
  • Puedes usar symlink

Conclusión

Puede desarrollar y probar su paquete en su primer proyecto y usarlo con github y compositor en su segundo proyecto.


170
2018-02-03 12:00



Un punto importante que debe saber es que puede comprometerse con su repositorio del / proveedor. De hecho, el compositor crea un segundo control remoto llamado "compositor" 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 con su /vendor/MyCompany/MyBundle, de cualquier proyecto.

Como prueba, solo ejecuta git remote -v de cualquier paquete en 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 cual 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.


16
2018-04-30 22:16



En Symfony4, generate:bundle comando ya no está disponible. En cambio, puedes seguir este tutorial.

Primero crea un proyecto con:

composer create-project symfony/website-skeleton my-project

Entonces, crea un my-project/lib/AcmeFooBundle/src directorio. Aquí vivirá tu paquete. El espacio de nombre para este directorio será Acme\AcmeFooBundle, así que si creas una clase de servicio en lib/AcmeFooBundle/src/Service/Foo.php, su espacio de nombre sería Acme\AcmeFooBundle\Service.

Ahora tenemos que decirle al autocargador del compositor que busque nuevas clases en ese nuevo directorio, así que tenemos que editar composer.json  autoload sección:

"autoload": {
    "psr-4": {
        "Acme\\AcmeFooBundle\\": "lib/AcmeFooBundle/src/",
    }
}, 

y correr composer dump-autoload.

Ahora solo necesita agregar su clase de paquete a config/bundles.php:

return [
    ...
    Acme\AcmeFooBundle\AcmeFooBundle::class => ['all' => true],
];

y la inyección de dependencia para cargar la configuración de su paquete.

Si desea verificar sus servicios antes de agregar la inyección de dependencia, puede simplemente autoconectarlos en config/services.yml:

services:
    ...
    Acme\AcmeFooBundle\Services\Foo: ~

Eso es todo. Seguir mejores prácticas y seguir codificando


0
2018-06-08 08:30