Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从控制器Symfony2内部访问不同的控制器_Php_Symfony - Fatal编程技术网

Php 如何从控制器Symfony2内部访问不同的控制器

Php 如何从控制器Symfony2内部访问不同的控制器,php,symfony,Php,Symfony,我需要从另一个控制器中的另一个控制器访问一个方法。我怎么做?我可以使用this->get方法吗 我是否可以将控制器包含在当前控制器中,并将其作为对象,然后通过该对象访问该方法?这样做“可以”吗 我想调用另一个控制器的form方法--newAction。您可以将控制器定义为服务,然后在另一个控制器中获取它 在services.yml中,将所需控制器定义为服务: services: your_service_name: class: YourCompany\YourBundl

我需要从另一个控制器中的另一个控制器访问一个方法。我怎么做?我可以使用
this->get
方法吗

我是否可以将控制器包含在当前控制器中,并将其作为对象,然后通过该对象访问该方法?这样做“可以”吗


我想调用另一个控制器的form方法--newAction。

您可以将控制器定义为服务,然后在另一个控制器中获取它

services.yml
中,将所需控制器定义为服务:

services:
    your_service_name:
        class: YourCompany\YourBundle\Controller\YourController
然后,在任何控制器中,您都可以通过容器获得此服务:

$yourController = $this->get('your_service_name');


文档中有一些有用的信息

如果您不想将类定义为服务,因为我觉得这不是一个好的实践,并且@Qoop引用了,您可以使用转发:


如果您需要在模板中嵌入内部控制器操作的输出,也有相应的功能。

如果您遵循MVC,我认为您不应该这样做,您应该将taht函数提取到模型或帮助对象中。您可以演示如何用MVC方式执行此操作吗?您希望使用该控制器做什么?只要Symfony具有类似“{render(controller(…)}}”的内容”“MVC不应该是一个问题,这是最好的方式吗。还是有别的办法it@CJ正如评论中提到的,您不应该在另一个控制器中调用控制器操作。但是从Symfony2POV来看,将控制器定义为服务是非常感谢的。我只是想确保我遵循的是我得到的最佳方案**FatalErrorException:错误:在/home/cj/public_html/Symfony/vendor/Symfony/Symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php第163行中对非对象调用成员函数get()。我尝试调用的方法确实存在。你能帮忙吗。我已经按照您告诉meServices作为控制器不推荐的方式定义了服务,至少Febien不推荐这样做-请参阅:这是错误的,因为它将使用fancy action的模板而不是关联的模板生成响应indexAction@gondo,你的意思是,如果你通过注释使用模板?是的。这是正确的。然后,您将获得生成的模板——因此响应将被发回。如果您想在使用注释之前获取数据,那么您必须将类定义为服务。我认为在单元测试中,关于“转发”会有更大的问题。您将无法模拟子请求,当您将控制器定义为服务时,您可以轻松地模拟它。@user3746259如果您想为控制器编写单元测试,我建议您阅读以下答案:@user3746259,请阅读接受的答案。答案不是关于“如何”,而是关于如何测试控制器。我同意作者的观点,单元测试不是测试控制器的正确工具。功能测试是非常重要的。
public function indexAction($name)
{
    $response = $this->forward('AcmeHelloBundle:Hello:fancy', array(
        'name'  => $name,
        'color' => 'green',
    ));

    // ... further modify the response or return it directly

    return $response;
}