gpt4 book ai didi

php - 使用可变操作在 Symfony 2 中定义路由

转载 作者:可可西里 更新时间:2023-10-31 23:05:21 25 4
gpt4 key购买 nike

试想一下,我有一个 Controller ,其中包含多个操作。为了实现每个操作,我必须像这样在 routing.yml 文件中严格定义它:

admin_edit_routes:
pattern: /administrator/edituser
defaults: { _controller: MyAdminBundle:Default:edituser }
admin_add_routes:
pattern: /administrator/adduser
defaults: { _controller: MyAdminBundle:Default:adduser }

我可以有很多这样的页面。我想要实现的是在我的 URI 中定义必要的操作,就像 Kohana 路由一样。我的意思是,我只想对所有操作使用一条路线:(以下代码无效,仅作为示例)

admin_main_route:
pattern: /administrator/{action}
defaults: { _controller: MyAdminBundle:Default:{action} action:index}

它将所有对/administrator/{anything} 的请求传递到这条路由,然后,根据 uri 中声明的操作,将调用所需的操作。如果 uri 中没有说明操作,那么我们就会被抛到索引操作。

在 Symfony 2 中是否可以以任何方式实现?如果可以,那么如何实现?提前致谢。

最佳答案

这样做感觉不对。通过直接通过 GET 方法“即时” 公开您的 Controller API(方法),您的应用程序将面临安全漏洞。这也很容易导致不良行为。
此外,例如,您将如何在 Twig 中生成路线?通过给出与方法名称相关的显式常量?

{{ path('dynamic_route', { 'method': 'addUser' }) }}

这不是 Symfony 的工作方式,也不是它所推荐的。 Symfony 不是 CodeIgniter 也不是 Kohana。您不需要第二个“前端 Controller ”

如果这是一个懒惰的问题,您可以将路由配置切换为 annotations .让 Symfony 自动生成您需要的路由,只需最少的努力。

namespace Acme\FooBundle\Controller;

/**
* @Route("/administrator")
*/
class DefaultController extends Controller
{
/**
* @Route
*/
public function indexAction(Request $request);

/**
* @Route("/adduser")
*/
public function addUserAction(Request $request);

/**
* @Route("/edituser")
*/
public function editUserAction(Request $request);

/**
* @Route("/{tried}")
*/
public function fallbackAction($tried, Request $request)
{
return $this->indexAction($request);
}
}

fallbackAction 方法,将不存在的任何/administrator/* 路由返回到indexAction 内容。

总而言之,我建议不要“即时”直接对方法名称使用动态路由。
另一种方法是创建一个命令,该命令将在执行后生成路由。

关于php - 使用可变操作在 Symfony 2 中定义路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24134805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com