Это правильное использование обработки исключений в PHP / Symfony2 - PullRequest
1 голос
/ 22 ноября 2011

Я создаю сервис для извлечения некоторых пользовательских данных

class ExampleService{
    // ...
    public function getValueByUser($user)
    {
        $result = $this->em->getRepository('SomeBundle:SomeEntity')->getValue($user);
        if (!$result instanceof Entity\SomeEntity) {
            throw new Exception\InvalidArgumentException("no value found for that user");
        }
        return $result;
    }
}

Затем в моем контроллере у меня есть

// ...
$ExampleService = $this->get('example_serivce');

$value = $ExampleService->getValueByUser($user);

Должен ли я использовать здесь исключение, чтобы указать, что нет значениябыл найден для этого пользователя в базе данных?

Если я должен, как мне обработать то, что возвращается из $ExampleService->getValueByUser($user) в контроллере - скажем, я просто хочу установить значение по умолчанию, если ничего не найдено (илиисключение возвращено)

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Вот как я это делаю.Давайте использовать пользовательский сервис и контроллер в качестве примера.Это не исключительное условие на уровне сервиса - он просто возвращает результат без его проверки:

class UserService
{
    public function find($id)
    {
        return $this->em->getRepository('UserBundle:User')->find($id);
    }
}

Но на уровне контроллеров я выбрасываю исключение, если запрошенный пользователь не найден:

class UserController
{
    public function viewAction($id)
    {
        $user = $this->get('user.service')->find($id);
        if (!$user) {
            throw $this->createNotFoundException(
                $this->get('translator')->trans('user.not_found')
            );
        }
        // ...
    }
}
1 голос
/ 22 ноября 2011

Где вы хотите обработать исключение, зависит от вас, однако я бы обработал его в контроллере (и выбросил в модели).Я обычно пытаюсь вызвать другой шаблон, если есть ошибка, чтобы избежать кучу условных выражений, но иногда вам просто нужно вместо этого добавить дополнительную логику в шаблон.это действительно исключительное условие - может быть проще вернуть null и обработать это возвращаемое значение в вашем контроллере.Из объектов данных (значения, службы и пользователя) я не могу точно сказать, будет ли это происходить постоянно или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...