bestit / odm-param-converter-bundle
为best it odm提供symfony参数转换器
Requires
- php: ^7.0
- bestit/commercetools-odm-bundle: ^0.54 || ^1
- sensio/framework-extra-bundle: ^3.0.2
- symfony/config: ^3.1
- symfony/dependency-injection: ^3.1
- symfony/http-kernel: ^3.1
- symfony/yaml: ^3.1
Requires (Dev)
- phploc/phploc: ^3.0
- phpmd/phpmd: ^2.6
- phpunit/phpunit: ^5.5
- sebastian/phpcpd: ^3.0
- squizlabs/php_codesniffer: ^2.8
This package is auto-updated.
Last update: 2024-09-22 20:25:07 UTC
README
此包为commercetools odm框架提供symfony参数转换器 - 类似于doctrine参数转换器。
安装
步骤1:下载Bundle
打开命令行,进入项目目录,并执行以下命令以下载此bundle的最新稳定版本
$ composer require bestit/odm-param-converter-bundle
此命令需要您全局安装Composer,如Composer文档中的安装章节中所述。
步骤2:启用Bundle
然后,通过将其添加到项目中app/AppKernel.php
文件中注册的bundle列表中,来启用该bundle
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new BestIt\ODMParamConverterBundle\ODMParamConverterBundle(), ); // ... } // ... }
步骤3:使用
param converter的最简单用法是与标准id
字段一起使用。转换器获取给定类(由odm提供)的仓库并获取项。只需将您的commercetools对象作为参数类型提示,并将路由id字段命名为id
。内部,将执行findOneBy
方法,如果未找到项,则抛出NotFoundException
。
示例
// YourController.php
/**
* Get custom item
*
* @param CustomObject $customObject
* @Route("/custom/{id}")
*/
public function balanceAction(CustomObject $customObject)
{
// ...
}
如果占位符的名称与主键名称不同,请传递id选项(现在您必须注释param converter)
// YourController.php
/**
* Get custom item
*
* @param CustomObject $customObject
* @Route("/custom/{your_route_id}")
* @ParamConverter("customObject", class="Commercetools\Core\Model\CustomObject\CustomObject", options={
* "id" = "your_route_id"
* })
*/
public function balanceAction(CustomObject $customObject)
{
// ...
}
如果您必须传递多个参数以获取项,则可以创建映射。只需在映射选项中创建键值对。键是您的路由名称(例如,“container_key”),值是您的commercetools对象字段(例如,“container”)
// YourController.php
/**
* Get custom item
*
* @param CustomObject $customObject
* @Route("/custom/{container_key}/{item_key}")
* @ParamConverter("customObject", class="Commercetools\Core\Model\CustomObject\CustomObject", options={
* "mapping": {"container_key": "container", "item_key": "key"}
* })
*/
public function balanceAction(CustomObject $customObject)
{
// ...
}
如果您的路由参数与您的commercetools对象字段相同,则可以跳过定义映射。只要您的路由中没有id
键或已定义id
选项,param converter就会这样做
// YourController.php
/**
* Get custom item
*
* @param CustomObject $customObject
* @Route("/custom/{container}/{key}")
*/
public function balanceAction(CustomObject $customObject)
{
// ...
}
有时,您想执行仓库的特定方法。您可以通过设置选项中方法的名称来轻松更改仓库方法。转换器将使用id
的值作为方法参数执行方法。
// YourController.php
/**
* Get custom item
*
* @param CustomObject $customObject
* @Route("/custom/{id}")
* @ParamConverter("customObject", class="Commercetools\Core\Model\CustomObject\CustomObject", options={
* "repository_method" = "findByMyOwnId",
* })
*/
public function balanceAction(CustomObject $customObject)
{
// ...
}
当然,您可以混合使用仓库方法选项和您的映射。在以下代码中,转换器将执行findByCriteria
。值将作为单个数组参数传递。
// YourController.php
/**
* Get custom item
*
* @param CustomObject $customObject
* @Route("/custom/{container}/{key}")
* @ParamConverter("customObject", class="Commercetools\Core\Model\CustomObject\CustomObject", options={
* "repository_method" = "findByCriteria",
* })
*/
public function balanceAction(CustomObject $customObject)
{
// ...
}
...
// YourController.php
/**
* Get custom item
*
* @param CustomObject $customObject
* @Route("/custom/{container_key}/{item_key}")
* @ParamConverter("customObject", class="Commercetools\Core\Model\CustomObject\CustomObject", options={
* "repository_method" = "findByCriteria",
* "mapping": {"container_key": "container", "item_key": "key"}
*/
public function balanceAction(CustomObject $customObject)
{
// ...
}
但是,如果仓库不期望数组,则为例,自定义对象仓库的findByContainerAndKey
期望字符串容器+字符串键,而不是数组
// CustomObjectRepository.php
public function findByContainerAndKey(string $container, string $key)
{
// ...
}
因此,您可以传递map_method_signature
选项。如果为true,所有参数都将与方法参数匹配。
// YourController.php
/**
* Get custom item
*
* @param CustomObject $customObject
* @Route("/custom/{container}/{key}")
* @ParamConverter("customObject", class="Commercetools\Core\Model\CustomObject\CustomObject", options={
* "repository_method" = "findByContainerAndKey",
* "map_method_signature" = true
* })
*/
public function balanceAction(CustomObject $customObject)
{
// ...
}
...
// YourController.php
/**
* Get custom item
*
* @param CustomObject $customObject
* @Route("/custom/{container_key}/{item_key}")
* @ParamConverter("customObject", class="Commercetools\Core\Model\CustomObject\CustomObject", options={
* "repository_method" = "findByContainerAndKey",
* "mapping": {"container_key": "container", "item_key": "key"},
* "map_method_signature" = true
*/
public function balanceAction(CustomObject $customObject)
{
// ...
}