我配置了以下UserDataPersister(直接取自教程):
Information for Service "App\DataPersister\UserDataPersister"
=============================================================
Service ID App\DataPersister\UserDataPersister
Class App\DataPersister\UserDataPersister
Tags api_platform.data_persister (priority: -1000)
Public no
Shared yes
Abstract no
Autowired yes
Autoconfigured yes
和以下用户夹具:
App\Entity\User:
user_{1..10}:
email: "usermail_<current()>\\@email.org"
plainPassword: "plainPassword_<current()>"
__calls:
- initUuid: []
但是我在加载这个夹具时会出现错误:
An exception occurred while executing 'INSERT INTO "user" (id, uuid, roles, password, email) VALUES (?, ?, ?, ?, ?)' with params [281, "16ac40d3-53af-45dc-853f-e26f188d
1818", "[]", null, "usermail1@email.org"]:
SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "password" of relation "user" violates not-null constraint
DETAIL: Failing row contains (281, 16ac40d3-53af-45dc-853f-e26f188d1818, [], null, usermail1@email.org).
我的UserDataPersister实现与此相同。
引用文章末尾的内容
如果我们现在停止。。。耶!我们没有。。。真正地完成任何操作:我们添加了这个新的plainPassword属性。。。但什么都没用!因此,请求最终会在数据库中爆炸,因为$password字段将为空。
接下来,我们需要钩住请求处理过程:我们需要在反序列化之后但在持久化之前运行一些代码。我们将使用数据持久器来实现这一点。
由于单元测试将POST请求,数据持久化器由api平台调用,它将按事件获取编码逻辑。在夹具的情况下,直接进行原则批处理插入,这将绕过所有持久化逻辑并导致空密码。
正如@rishta所提到的,有一种方法可以解决这个问题,使用Processor对文档中引用的数据装置实现哈希
<?php
namespace App\DataFixtures\Processor;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Fidry\AliceDataFixtures\ProcessorInterface;
use App\Entity\User;
final class UserProcessor implements ProcessorInterface
{
private $userPasswordEncoder;
public function __construct(EntityManagerInterface $entityManager, UserPasswordEncoderInterface $userPasswordEncoder) {
$this->userPasswordEncoder = $userPasswordEncoder;
}
/**
* @inheritdoc
*/
public function preProcess(string $fixtureId, $object): void {
if (false === $object instanceof User) {
return;
}
$object = $this->userPasswordEncoder(
$object,
$object->getPlainPassword()
);
}
/**
* @inheritdoc
*/
public function postProcess(string $fixtureId, $object): void
{
// do nothing
}
}
注册服务:
# app/config/services.yml
services:
_defaults:
autoconfigure: true
App\DataFixtures\Processor\UserProcessor: ~
#add tag in case autoconfigure is disabled, no need for auto config
#tags: [ { name: fidry_alice_data_fixtures.processor } ]
在API平台中进行输入屏蔽的一个更好的方法是使用DTO模式,这与本文建议的相反,在本文中,您可以:
文档中有关DTO的更多信息
我刚开始使用API和Python获取数据。我想从我的交易平台中提取数据。他们提供了以下说明: http://www.questrade.com/api/documentation/getting-started 我可以完成步骤4,并有一个访问令牌。我需要第五步的帮助。我如何翻译这个请求: 进入Python代码?我已经试过了 我读了这个后尝试:Python请求与身份验证(access_token)
问题内容: 我遇到此错误: java.lang.UnsupportedOperationException:当前平台不支持桌面API 我会从Java应用程序中打开文件。我使用这种方法: 我怎么解决这个问题? 问题答案: 基本上,问题是Java桌面集成在Linux上无法很好地工作。 它旨在与Windows配合使用。某些东西可以在其他系统上运行,但是没有人真正关心为这些系统添加适当的支持。即使安装了必
我正在学习带有 Api-Platform 的 OpenApi/Swagger API。我创建了一个新的endpoint,它接受枚举的值作为参数: 然而,这是一个相当常见的参数,值可以频繁更新(随着服务器的增加),我想使用某种模板。 所以我试着: 跟 或者 以及其他各种形式,都无济于事。 我试图理解组件的概念,但无法找到在Symfony/Api平台中使用它们的方法。 如何在不同的endpoint重用
新浪SAE平台使用 新版sp框架直接支持在新浪云计算平台(SAE)上面运行。 不再需要像旧版一样区分SAE版本和非SAE版本的做法,目前SAE对许多PHP原生环境支持都比较好了。 新版框架在SAE平台上面的演示地址:https://speedphp.sinaapp.com/ 当然,在SAE上面使用新版sp框架,还是得注意一下: protected/config.php配置文件中,设置一下view的
我需要创建一个GETendpoint来返回通过超文本传输协议客户端从另一个应用程序获取的资源,而不是基于实体。我获取的资源是一个数组: 然后我需要查询数据库以获取一些数据以添加到资源数组中。 所以我在中创建了它: 但是现在,我希望我的api返回json api响应格式:https://jsonapi.org/. 基于实体的资源,api平台完全支持。我不需要做太多。我只是在实体类中添加“key”并配
炼金台与平台方合作,帮助核心企业实施上下游贷款业务。通过风险清洗筛掉不良客户,并将合格客户的不规则数据“冶炼” 成标准的风控半成品,批量推送给金融机构。