【问题标题】:Symfony2 - Call static property from serviceSymfony2 - 从服务调用静态属性
【发布时间】:2014-02-14 12:47:50
【问题描述】:

我在 Simfony2 的控制器方法中调用服务。

完全没问题,效果很好。

function getFilterListBrandAction($brand_id = 0, $url_params = array()){
 $b = $this->get('brand.service');
 return $this->render('BundleMybundle:Page:page.html.twig', array(
            'param1' => $b->getParam(),
            'do_not_change' => $b::$filter_accepted['brand']
        ));     
    }

当我尝试从先前实例化的服务中调用静态属性$b::$filter_accepted['brand'] 时,问题就来了。相反,我对其他方法$b->getParam()没有问题。

有办法从服务中调用静态属性/方法吗?

【问题讨论】:

  • 您是否看到任何错误消息?
  • 请显示该数组var_dump($filter_accepted['brand'])的结果
  • 我认为这通常是个坏主意。如果$filter_accepted['brand'] 返回一些意想不到的值怎么办?抱歉,但我不记得我是否在文档中看到过这样的构造。也许您的目标可以通过其他方式实现?就像通过将checkChangeStatus($brand) 方法添加到您的brand.service 一样。您可以在此方法中执行一些逻辑并返回值。

标签: web-services symfony service controller symfony-2.4


【解决方案1】:

是的,可以从服务访问公共属性。

这对我有用:

您的服务:

/**
 * Your Service
 */
class YourService
{
    public static $filter_accepted = array('brand' => 'my brand');
}

控制器

class YourController extends ContainerAware
{
    public function myAction()
    {
        $service = $this->container->get('acme.my_service');

        var_dump($service::$filter_accepted);
        // Returns: array(1) { ["brand"]=> string(8) "my brand" }

        var_dump($service::$filter_accepted['brand']);
        // Returns: string(8) "my brand"
    }
}

【讨论】:

  • 那你没有正确的服务。发布您的服务代码和声明它的 config.yml 文件。同样,当我自己尝试时,这应该可以工作。祝你好运!
  • 非常感谢。我非常愚蠢。我在错误的服务中搜索!再次感谢你! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
相关资源
最近更新 更多