kjonski / how-to-bundle
一步一步的 Symfony bundle 教程
Requires
- symfony/config: ^4.0
- symfony/dependency-injection: ^4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.10
- phpstan/phpstan: ^0.9.2
- phpunit/phpunit: ^7.0
- sebastian/phpcpd: ^4.0
- squizlabs/php_codesniffer: ^3.2
- symfony/http-kernel: ^4.0
This package is auto-updated.
Last update: 2024-09-17 18:31:54 UTC
README
how-to-bundle
一步一步的教程,教你如何准备 Symfony bundle
准备仓库
以您喜欢的方式准备 bundle 仓库。您可以使用 Github 或本地仓库。请注意,仓库需要能被您未来的项目访问。
使用 Github 向导,您可以添加 README.md 和 LICENSE
克隆仓库
git clone https://github.com/kjonski/how-to-bundle.git
并用编辑器打开。
添加 composer.json
文件
{ "name": "kjonski/how-to-bundle", "type": "symfony-bundle", "description": "Step-by-step Symfony bundle tutorial", "keywords": ["php", "symfony", "reusable bundle", "tutorial"], "license": "MIT", "authors": [ { "name": "Karol Jonski", "email": "kjonski@pgs-soft.com" } ] }
提交并推送更改。
配置项目的仓库
如果您想在现有项目中开发 bundle,并且 bundle 不在 packagist.org 上,请配置主项目的 composer.json
。添加/修改 repositories
部分
"repositories": [ { "type": "git", "url": "https://github.com/kjonski/how-to-bundle.git" } ],
当使用 Github 仓库时,或
"repositories": [ { "type": "git", "url": "/path/to/how-to-bundle.git" } ],
当使用本地仓库时。更多详情请参阅 Composer 文档。
使用 composer 安装您的 bundle
$ composer require kjonski/how-to-bundle
准备结构
b$
代表 vendor/yourVendorName/yourBundle
(例如 vendor/kjonski/how-to-bundle
)目录。
b$ mkdir src b$ mkdir tests
在您的 composer.json
中配置自动加载
"autoload": { "psr-4": { "Kjonski\\HowToBundle\\": "src/" } }, "autoload-dev": { "psr-4": { "Kjonski\\HowToBundle\\Tests\\": "tests/" } }
安装依赖
b$ composer require symfony/dependency-injection b$ composer require --dev symfony/http-kernel b$ composer require --dev phpunit/phpunit
添加 bundle 类
<?php // src/KjonskiHowToBundle.php namespace Kjonski\HowToBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class KjonskiHowToBundle extends Bundle { }
添加扩展类
<?php // src/DependencyInjection/KjonskiHowToExtension.php namespace Kjonski\HowToBundle\DependencyInjection; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Extension\Extension; class KjonskiHowToExtension extends Extension { public function load(array $configs, ContainerBuilder $container) { } }
准备第一个测试
<?php // tests/KjonskiHowToBundleTest.php namespace Kjonski\HowToBundle\Tests; use Kjonski\HowToBundle\DependencyInjection\KjonskiHowToExtension; use Kjonski\HowToBundle\KjonskiHowToBundle; use PHPUnit\Framework\TestCase; class KjonskiHowToBundleTest extends TestCase { public function testGetContainerExtension(): void { $bundle = new KjonskiHowToBundle(); $this->assertInstanceOf(KjonskiHowToExtension::class, $bundle->getContainerExtension()); } }
并从 bundle 目录运行
b$ vendor/bin/phpunit tests
从现在起,您可以
$ composer remove kjonski/how-to-bundle
并且
$ composer require kjonski/how-to-bundle
您的 bundle 将会被重新安装。
请注意,您需要运行
b$ composer install
来安装您的开发依赖。
添加测试配置(tests/phpunit.xml
)
<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/7.0/phpunit.xsd" backupGlobals='false' backupStaticAttributes='false' beStrictAboutTestsThatDoNotTestAnything='true' bootstrap='./../vendor/autoload.php' colors='true' convertErrorsToExceptions='true' convertNoticesToExceptions='true' convertWarningsToExceptions='true' stopOnError='false' stopOnFailure='false' stopOnIncomplete='false' stopOnSkipped='false' verbose='true' > <php> <ini name="error_reporting" value="-1" /> <env name="KERNEL_CLASS" value="\Kjonski\HowToBundle\Tests\App\AppKernel" /> <ini name='display_errors' value='1' /> <ini name='display_startup_errors' value='1' /> <ini name='error_reporting' value='-1' /> <ini name='memory_limit' value='-1' /> </php> <testsuites> <testsuite name="How To Bundle Test Suite"> <directory>.</directory> </testsuite> </testsuites> <logging> <log type='coverage-clover' target='coverage.xml' /> <log type='coverage-text' target='php://stdout' showOnlySummary='true' /> </logging> <filter> <whitelist> <directory>../src</directory> <exclude> <directory>../vendor</directory> </exclude> </whitelist> </filter> </phpunit>
- 您可以看到已经配置了 KERNEL_CLASS,因为对于某些情况,您需要为 phpunit 配置自己的 kernel。
- 请将
tests/coverage.xml
添加到忽略文件中。
现在您已准备好运行测试套件
b$ vendor/bin/phpunit -c tests/phpunit.xml
是时候使用代码质量工具了
安装
b$ composer require --dev phpstan/phpstan b$ composer require --dev sebastian/phpcpd b$ composer require --dev squizlabs/php_codesniffer b$ composer require --dev friendsofphp/php-cs-fixer
添加 php-cs-fixer.config.php,phpstan.neon(可选)并运行
b$ vendor/bin/php-cs-fixer fix --config=tests/php-cs-fixer.config.php --dry-run --diff src tests b$ vendor/bin/phpcs --report-full --standard=PSR2 src tests b$ vendor/bin/phpstan analyse --level=4 src -c tests/phpstan.neon b$ phpdbg -qrr vendor/bin/phpunit -c tests/phpunit.xml
构建?当然!
- 前往 https://docs.travis-ci.cn/user/getting-started/ 并按照说明启用 Travis 构建功能,以对您的(Github)仓库进行构建。
- 添加简单的 .travis.yml 或遵循 Symfony 持续集成。
从现在开始,每次向您的仓库推送时都会运行构建。 - 现在您可以前往您的 Travis 配置文件 -> 您的仓库,获取构建徽章并将其添加到
README.md
更多徽章?
- 前往 https://scrutinizer-ci.com/ 并使用 Github 进行注册
- 添加仓库
- 更新配置
build: nodes: analysis: ... tests: override: ... - command: vendor/bin/phpunit -c tests/phpunit.xml coverage: file: 'tests/coverage.xml' format: 'clover' ...
以启用代码覆盖率。
通过 Packagist 发布
- 前往 https://packagist.org.cn 并提交您的 bundle
- 配置 GitHub 服务钩子 以保持您的包更新
- 请记住从项目的
composer.json
存储库部分移除您的本地/Github 仓库
来源
https://getcomposer.org.cn/doc/05-repositories.md#loading-a-package-from-a-vcs-repository
https://symfony.ac.cn/doc/current/bundles.html#creating-a-bundle
https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet