我想将symfony2控制器扩展到使用api的项目中,但是我有一个非对象的错误,请使用getparameter()函数查看我的代码:

namespace Moda\CategoryBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class ApiController extends Controller
{
    /**
     * @var String
     */
    protected $_host;

    /**
     * @var String
     */
    protected $_user;

    /**
     * @var String
     */
    protected $_password;

    public function __construct()
    {
        $this->_host = $this->container->getParameter('api_host');
        $this->_user = $this->container->getParameter('api_user');
        $this->_password = $this->container->getParameter('api_password');

    }
}

下一个控制器
namespace Moda\CategoryBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class CategoryController extends ApiController
{
    /**
     * @Route("/category", name="_category")
     * @Template()
     */
    public function indexAction()
    {
        return array('name' => 'test');
    }

}

最后,我犯了个致命的错误:
fatalerrorexception:错误:调用成员函数getparameter()
在(..)中的非对象上
我试图使用$this->setcontainer(),但它不起作用。你知道我怎么能解决这个问题吗?

最佳答案

如果控制器未定义为服务,则不会持久化该控制器的构造函数执行。
你有两个选择来解决你的问题:
将控制器定义为服务并使用依赖注入注入所需的参数。
在控制器或父抽象控制器上添加init方法,并调用init方法,然后再执行需要这些参数可用的操作;

10-06 04:59