Pro*_*oGM 0 postgresql symfony doctrine-orm
我将 Symfony 3.2 与学说和 postgresql 一起使用。
我创建了一个实体uuid作为主键。
我的实体定义:
/**
* Booking
*
* @ORM\Table(name="booking")
* @ORM\Entity(repositoryClass="AppBundle\Repository\BookingRepository")
* @ORM\EntityListeners({"AppBundle\EventListener\BookingListener"})
*/
class Booking {
/**
* @var string
*
* @ORM\Column(type="guid")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我有一个这样的显示动作:
/**
* @Route("booking/{id}", name="booking_show")
* @Method({"GET"})
*/
public function showAction(Request $request, Booking $booking) {
...
}
Run Code Online (Sandbox Code Playgroud)
一切似乎都正常,但是当我尝试加载将错误值作为 ID(即/booking/hello123)的路由时,我收到:
SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for uuid: "hello123"
Run Code Online (Sandbox Code Playgroud)
相反,我希望得到 404。
有没有办法捕获此异常并重定向到 404 页面?
您可以利用Route Requirements - 您可以指定您的参数需要匹配哪些条件才能“符合”特定路线。这个要求是一个正则表达式,所以你需要做的就是为一个 UUID 写一个正则表达式
/**
* @Route("booking/{id}", name="booking_show", requirements={"id": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"})
* @Method({"GET"})
*/
public function showAction(Request $request, Booking $booking) {
...
}
Run Code Online (Sandbox Code Playgroud)
注意:上面使用的正则表达式只是我在 Google 中为 UUID 正则表达式找到的第一个结果,我没有验证它是否有效
最后,如果您的 id 与正则表达式不匹配,则它与路由不匹配,您应该得到 404。
| 归档时间: |
|
| 查看次数: |
3602 次 |
| 最近记录: |