我正在尝试测试一个API调用方法,该方法使用Basic Auth进行安全化,并且需要从安全上下文中检索用户.
我的config_test.yml文件(我正在使用内存数据库进行测试env):
imports:
- { resource: config_dev.yml }
doctrine:
dbal:
driver: pdo_sqlite
path: :memory:
memory: true
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
framework:
test: ~
session: ~
profiler:
enabled: false
web_profiler:
toolbar: false
intercept_redirects: false
swiftmailer:
disable_delivery: true
Run Code Online (Sandbox Code Playgroud)
我创建了一个测试,我按如下方式实例化客户端:
$options = array(
'environment' => 'test',
'debug' => true,
);
$this->client = static::createClient($options);
Run Code Online (Sandbox Code Playgroud)
测试看起来像:
public function testProfileAction()
{
$mockUser = new User();
$mockUser->setUsername("user");
$mockUser->setEmail("user@user.com");
$mockUser->setName("User");
$mockUser->setSurname("User");
$mockUser->setPlainPassword("1234567890");
$this->em->persist($mockUser);
$this->em->flush();
$crawler = $this->client->request('GET', '/api/1/user/profile', array(), array(), array(
'PHP_AUTH_USER' => 'user',
'PHP_AUTH_PW' => …Run Code Online (Sandbox Code Playgroud) 我正在创建一个自定义验证器约束来验证“联系人”,类似于“John Doe <jdoe@example.com>”。按照食谱,我创建了约束类:
<?php
namespace MyCompany\MyBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class Contact extends Constraint
{
public $message = 'The string "%string%" is not a valid Contact.';
}
Run Code Online (Sandbox Code Playgroud)
并创建了验证器:
<?php
namespace MyCompany\MyBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\EmailValidator;
class ContactValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (!preg_match('#(.*)\s+<(.*)>#', $value, $matches)) {
$this->context->addViolation($constraint->message, array('%string%' => $value));
}
$emailValidator = new EmailValidator();
if (isset($matches[2]) && $emailValidator->validate($matches[2], new Email())) {
$this->context->addViolation($constraint->message, array('%string%' => $value));
} …Run Code Online (Sandbox Code Playgroud)