makg / symfony-utils-bundle
为 Symfony 4+ 应用提供有用的 Twig 扩展和其他工具。
Requires
- php: >=7.1
Requires (Dev)
- doctrine/annotations: ^1.0
- doctrine/orm: ^2.6
- moneyphp/money: ^3.3
- phpstan/phpstan: ^0.12.5
- symfony/config: ^4.2
- symfony/console: ^4.2
- symfony/dependency-injection: ^4.2
- symfony/form: ^4.2
- symfony/phpunit-bridge: ^4.3
- symfony/routing: ^4.2
- symfony/security: ^4.2
- symfony/templating: ^4.2
- symfony/twig-bundle: ^4.2
- symfony/validator: ^4.2
Suggests
- doctrine/orm: ^2.2
- moneyphp/money: ^3.3
- symfony/console: ^4.2
- symfony/routing: ^4.2
- symfony/validator: ^4.2
This package is auto-updated.
Last update: 2024-09-29 05:42:30 UTC
README
为 Symfony 4.x 提供各种有用功能的 Bundle。它包括
QueryFilter
,用于 Doctrine ORM 支持自定义搜索字符串查询,如symfony bundle site:github.com in-title:API
@CsrfTokenRequired
注解可强制在发送控制器操作时 HTTP 标头中存在有效的 CSRF 令牌。- Twig 函数:
path_js
,light_colors
- Twig 过滤器:
color
- 验证器:
UniqueEntityField
,PhoneNumber
- Doctrine 类型:
\Money\Money
(可嵌入的),money_currency
- 表单类型:
MoneyPhpType
作者:Maciej Gierej - http://maciej.gierej.pl
安装
composer req makg/symfony-utils-bundle
@CsrfTokenRequired 注解
用法
<?php namespace App\Controller; use MakG\SymfonyUtilsBundle\Annotation\CsrfTokenRequired; use Symfony\Component\Routing\Annotation\Route; class VotesController { /** * @Route("/vote", name="votes_vote") * @CsrfTokenRequired(id="votes", header="X-CSRF-Token", param="token") */ public function vote() { // ... } }
例如,您可以在 Twig 中通过 URL 传递 CSRF 令牌
{{ path('votes_vote', {token: csrf_token('votes')}) }}
查询过滤器
此 Bundle 中提供的查询过滤器允许处理类似 symfony bundle site:github.com in-title:API
的搜索查询字符串。每个过滤器(site,in-title)都可以由用户自定义的、实现 FilterInterface
的过滤器处理。
在上面的示例搜索查询字符串中,输入将分为
- 搜索短语:
symfony bundle
- 它们不由查询过滤器处理。您可以使用基于 symfony/console 的 StringInput 解析器的SearchQueryInput
类提取它们。您可以使用静态帮助方法:SearchQueryInput::getPhrasesFromInput('input')
。 - 过滤器:
site
,in-title
。如果容器中已注册一个带有makg.query_filter
标签的、支持给定名称的过滤器实现FilterInterface
的服务,则它将应用于传递的QueryBuilder
。
此 Bundle 提供了一个通用的过滤器 - IdFilter
。您可以在 Doctrine/QueryFilter/Filter/IdFilter.php
中查看它,以了解如何实现自己的过滤器。
用法
您可以使用自动装配注入 QueryFilter
服务。
<?php use Doctrine\ORM\QueryBuilder; use MakG\SymfonyUtilsBundle\Doctrine\QueryFilter\QueryFilter; /** @var QueryBuilder $queryBuilder */ /** @var QueryFilter $queryFilter */ $queryBuilder ->select('entity.id, entity.name'); $queryFilter->filter($queryBuilder, 'search phrase id:123');
Twig 函数
path_js
此函数渲染从 Router 中的路径,而不解析参数,即使它们是必需的。当您想要将应用程序的路由传递给 JavaScript 函数并在客户端替换参数时很有用。
用法
{# Route with "products_vote" name: /products/{id}/vote #} <script type="text/javascript"> let id = 123; let voteUrl = '{{ path_js('products_vote') }}'.replace('{id}', id); </script>
验证器
UniqueEntityField
它检查值是否与 Doctrine 实体中指定的字段唯一。用法
<?php $email = 'test@example.org'; $constraint = new UniqueEntityField(['entity' => User::class, 'field' => 'email']); $validator->validate($email, [$constraint]);
Doctrine 类型
Money
使用来自 moneyphp/money
包的 \Money\Money
类的可嵌入类型。为了使用它,您需要在 Doctrine 配置中设置映射(通常在 /config/packages/doctrine.yaml
中)
doctrine: # ... orm: mappings: Money: type: yml dir: '%kernel.project_dir%/vendor/makg/symfony-utils-bundle/Resources/config/doctrine/Money' prefix: Money is_bundle: false
<?php use Money\Money; class Entity { /** * @var Money * * @ORM\Embedded(class="\Money\Money") */ private $price; }
它会产生两个列:price_amount
,price_currency
。
货币(money_currency)
此类型会自动注册。它存储货币代码并将其转换为 \Money\Currency
对象。
表单类型
MoneyPhpType
此表单类型由两个字段组成:金额和货币。