2015-09-22 2 views
1

Мне сложно определить, что я делаю неправильно в symfony, чтобы подтвердить запрос.Проверка достоверности Symfony

У меня есть контроллер, который принимает пользователя через запрос POST

public function createAction(Request $request) 
{ 
    $params = $request->request->all(); 
    $user = new User(); 
    $user->setUsername($params['username']); 
    $user->setEmail($params['email']); 
    $user->setPassword($params['password']); 

    $errors = $this->get('validator')->validate($user); 

    if(count($errors) > 0) 
    { 
     return $this->respond(['errors' => $errors], 422); 
    } 
    else 
    { 
     $user = $this->get('userrepository')->create($user); 
     return $this->respond($user, 201); 
    } 
} 

Как вы можете видеть, я сначала создать пользователя, а затем передать его в службу валидатора и возвращать ошибки, если таковые имеются, в противном случае я попросите мой репозиторий создать пользователя в базе данных.

Проверка Я использую следующий (YAML):

AppBundle\Entity\User: 
    constraints: 
     - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: email 
    properties: 
     username: 
      - NotBlank: ~ 
     email: 
      - NotBlank: ~ 
      - Email: 
       message: The email {{ value }} is not a valid email. 
     password: 
      - NotBlank: ~ 

Теперь проверка работает, но он принимает Symfony вокруг 3000ms реагировать в dev env с пустой базой данных.

Что может быть причиной этого absurdly длительное время отклика?

Другие запросы GET/POST без подтверждения принимаются только за 250-300 мс.

PS: Я попытался ввести правила проверки в Entity как аннотации, но нет разницы во времени ответа.

+0

Попробуйте протестировать без единственного ограничения сущности. –

+0

Я пробовал это и не очень сильно влияет на время ответа (возможно, 50 мс). Так что это не кажется причиной – RVandersteen

+0

Странно. Можете ли вы профилировать свой запрос с помощью blackfire.io? –

ответ

0

Для дальнейшего использования:

Вопрос для меня использовал /web/app_dev.php/... для доступа Symfony вместо использования сборки в сервере в развитии.

$ php app/console server:run