makg/symfony-utils-bundle

为 Symfony 4+ 应用提供有用的 Twig 扩展和其他工具。

安装: 62

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 0

开放问题: 3

类型:symfony-bundle

v0.1.3 2020-12-12 11:54 UTC

README

Build Status

为 Symfony 4.x 提供各种有用功能的 Bundle。它包括

  • QueryFilter,用于 Doctrine ORM 支持自定义搜索字符串查询,如 symfony bundle site:github.com in-title:API
  • @CsrfTokenRequired 注解可强制在发送控制器操作时 HTTP 标头中存在有效的 CSRF 令牌。
  • Twig 函数:path_jslight_colors
  • Twig 过滤器:color
  • 验证器:UniqueEntityFieldPhoneNumber
  • 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')
  • 过滤器:sitein-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_amountprice_currency

货币(money_currency)

此类型会自动注册。它存储货币代码并将其转换为 \Money\Currency 对象。

表单类型

MoneyPhpType

此表单类型由两个字段组成:金额和货币。