gpt4 book ai didi

php - Symfony2 - 所有 Controller 的方法

转载 作者:行者123 更新时间:2023-12-02 08:32:01 25 4
gpt4 key购买 nike

在开发我的 Symfony2 应用程序时,我想有点像在 Ruby on Rails 中一样,让所有 Controller 都可以使用方法。在 RoR Controller 中,只需在 ApplicationController 之后继承,这就是您放置所有方法的地方。但是什么是 Symfony 方式,这里有什么好的做法?

我想要的功能其实很简单,类似这样:

public function showAction()
{
$user = $this->container->get('security.context')->getToken()->getUser();
}

我可以在此处加载当前用户,并且我希望在每次操作之前终止此函数,当然,无需将代码复制到每个 Controller 中。

最佳答案

您可以为此使用服务。

Acme/DemoBundle/MyService/MyService.php

<?php
namespace Acme/DemoBundle/MyService

class MyService {

public function myFunction(){
[...]
}

}

Acme/DemoBundle/Resources/config/services.yml

services:
my_service:
class: Acme/DemoBundle/MyService/MyService

或.xml版本

Acme/DemoBundle/Resources/config/services.xml

<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd"
>
<services>
<service id="my_service" class="Acme\DemoBundle\MyService\MyService">

</service>
</services>
</container>

然后在 Controller 中

Acme/DemoBundle/Controller/MyController.php

$this->container->get("my_service")->myFunction();

要使其在您的所有 bundle 中可用,只需相应地更新每个 bundle 的服务配置文件即可。

文档是 available here

关于php - Symfony2 - 所有 Controller 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25709272/

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