如何解决Symfony - 抛出异常,从侦听器返回 403 config/packages/api_platform.yamlsrc/Exception/AccessDeniedException.phpconfig/packages/api_platform.yaml监听器.php
我将 import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Tab Widget")
tabControl = ttk.Notebook(root)
tab1 = ttk.Frame(tabControl)
tab2 = ttk.Frame(tabControl)
tabControl.add(tab1,text ='Tab 1')
tabControl.add(tab2,text ='Tab 2')
tabControl.pack(expand = 1,fill ="both")
paned_window1 = tk.PanedWindow(tab1,orient = tk.VERTICAL,bg='red',bd=10)
paned_window1.pack(expand=True,fill='both')
paned_window2 = tk.PanedWindow(tab1,bg='blue',bd=10)
paned_window2.pack(expand=True,fill='both')
label = tk.Label(text='See it is possible')
paned_window1.add(label)
label2 = tk.Label(text='Oh no!')
paned_window2.add(label2)
root.mainloop()
与 Symfony5
一起使用
我将 ApiPlatform
用于多项任务,包括做一些我在选民中无法完成的 Listener
。
所以通过一个简单的条件,我可以验证我的实体的哪个字段正在被修改。
我检查修改后的字段,并检查它们是否与唯一可以修改的字段不同。
方法如下:
authorization
现在我抛出一个 $modifiedValues = $eventArgs->getEntityManager()->getUnitOfWork()->getEntityChangeSet($eventArgs->getObject());
foreach ($modifiedValues as $key => $value) {
if ("statut" != $key) {
throw new AccessDeniedException('Vous ne pouvez pas modifier ce champ.');
}
}
,我认为它会返回一个 AccessDeniedException
,但实际上返回一个 403
。
500
部分实际上正在工作,但我对逻辑中的这个“异常”感到有些困扰,因为其他授权规则将返回 authorization
或 200
。>
所以我的问题是:
- 有谁知道为什么这个异常会这样?如果这是正常行为或有什么问题
- 还有其他方法可以从这个
403
返回一个403
吗?
感谢您的时间!
解决方法
根据documentation,您可以配置框架以捕获异常。
config/packages/api_platform.yaml
source = {
"image_1.jpg": ['image_xyz.jpg','image_abc.jpg'],"image_xyz.jpg": ["image_1.jpg","image_abc.jpg"],"image_abc.jpg": ["image_xyz.jpg","image_1.jpg"],"image_2.jpg": ["image_3.jpg"],"image_3.jpg": ["image_2.jpg"],"image_5.jpg": []
}
dest = dict()
for k,v in source.items():
ok = True
for k1,v1 in dest.items():
if k in v1: ok = False
if ok: dest[k] = v
print(dest) # New filtered dict
但您可能应该创建自己的 Exception 类,从 AcessDeniedException 扩展它并对其进行配置。
src/Exception/AccessDeniedException.php
api_platform:
exception_to_status:
Symfony\Component\Security\Core\Exception\AccessDeniedException: 403
config/packages/api_platform.yaml
<?php
namespace App\Exception;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class MyAccessDeniedException extends AccessDeniedException
{
}
监听器.php
api_platform:
exception_to_status:
App\Exception\MyAccessDeniedException: 403
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。