【问题标题】:Symfony 2 Controller Action no return ResponseSymfony 2 控制器操作无返回响应
【发布时间】:2015-09-13 16:54:18
【问题描述】:

我已经有一段时间没有在 Synfony 中编程了,我有一些疑问。

动作控制器是否有可能返回一个变量(例如整数)而不是响应对象或 Json 对象。

我需要的是在不同控制器的另一个函数中调用一个函数。如果 2 个函数位于同一个控制器中,则没有问题(像这样):

class AController{
  public function AAction(){
    $var = $this->BAction(); //Do whatever I want with $var
    return Response ("Hello");
  }

  public function BAction(){
    return 34; //return an integer instead of a Response
  }
 }

问题是当 BAction 在另一个控制器中时。如果我使用转发,Symfony 期望 BAction 返回一个 Response 对象或一个 Json 数组,但我只想返回一个简单的变量。

这可能吗?返回一个简单的整数...

非常感谢!!

【问题讨论】:

  • 我不知道具体的用例(这个例子太宽泛了,这种类型的问题有点离题,恕我直言),但不应该使用控制器来检索“模型数据”。

标签: function symfony controller return


【解决方案1】:

没有一个动作必须返回一个响应对象。但是,如果您有两个控制器(即两个不同的类),那么您可以创建一个 service。

app/config/config.yml

services:
    app.my_ownservice:
        class:        AppBundle\Services\OwnService
        arguments: 
            entityManager: "@doctrine.orm.entity_manager"

app/Services/OwnService.php

namespace AppBundle\Services;

use Doctrine\ORM\EntityManager;

class OwnService {

    /**
     *
     * @var EntityManager 
     */
    private $em;

    public function __constructor(EntityManager $entityManager)
    {
        $this->em = $entityManager;
    }

    public function doSomething(){
       // you could use the entitymanager here
       return 'Okay i will do something.';
    }

}

您可以从每个控制器(或其他)执行以下操作:

$myOwnService = $this->get('app.my_ownservice');
$text = $myOwnService->doSomething();
// echo $text;

【讨论】:

  • 不要过度吹毛求疵,但从技术上讲,控制器操作可以返回它想要的任何东西。然后调度程序将发送一个 VIEW 消息来处理它。但除了那些无关紧要的细节之外,您的答案是正确的方法。
【解决方案2】:

一个控制器不应该使用另一个控制器的动作。那不是控制器解决的问题。 Symfony 业务逻辑结构是基于 SOA 的。 (https://en.wikipedia.org/wiki/Service-oriented_architecture) 因此,对于自定义业务逻辑,您应该始终使用:

服务:http://symfony.com/doc/current/book/service_container.html

事件:http://symfony.com/doc/current/components/event_dispatcher/introduction.html

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 2014-12-02
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多