繁体   English   中英

这是否正确使用PHP / Symfony2中的异常处理

[英]Is this correct use of Exception handling in PHP / Symfony2

我正在创建一个服务来获取一些用户数据

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)返回的内容-假设我什么都没找到(或返回异常),只想设置一个默认值

我就是这样做的。 我们以用户服务和控制器为例。 它不是服务层中的例外情况 - 它只返回结果而不检查它:

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')
            );
        }
        // ...
    }
}

您要在哪里处理异常取决于您,但是我会在控制器中处理该异常(并将其扔到模型中)。 我通常尝试在出现错误的情况下调用其他模板,以避免出现一系列条件,但是有时您只需要在模板中添加额外的逻辑即可。

另外,您还必须问自己这是否真的是例外情况-在控制器中返回null并处理该返回值可能会更容易。 我不能从数据对象(值,服务和用户)中真正分辨出这是否会一直发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM