- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在使用 Symfony2 时遇到了一些问题。即如何使用 __construct() 函数。官方文档非常糟糕!
我希望能够使用以下内容:
public function __construct()
{
parent::__construct();
$user = $this->get('security.context')->getToken()->getUser();
}
我怎么会得到以下错误:
Fatal error: Cannot call constructor in /Sites/src/DEMO/DemoBundle/Controller/Frontend/HomeController.php on line 11
第 11 行是“parent::__construct();”
我删除它并得到以下新错误
Fatal error: Call to a member function get() on a non-object in /Sites/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 242
我认为我可能需要设置 ContainerInterface DIC,但我不知道该怎么做(我试过但失败了,很惨)
有什么想法吗?
更新 - 尝试更改以扩展 ContainerAware 并收到此错误:
Fatal error: Class DEMO\DemoBundle\Controller\Frontend\HomeController cannot extend from interface Symfony\Component\DependencyInjection\ContainerAwareInterface in /Sites/src/DEMO/DemoBundle/Controller/Frontend/HomeController.php on line 43
在 Controller 中使用以下代码:
<?php
namespace DEMO\DemoBundle\Controller\Frontend;
use Symfony\Component\DependencyInjection\ContainerAware;
class HomeController extends ContainerAwareInterface
{
protected $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
最佳答案
我假设您正在扩展默认的 Symfony Controller ?如果是这样,看看代码就会找到答案:
namespace Symfony\Bundle\FrameworkBundle\Controller;
use Symfony\Component\DependencyInjection\ContainerAware;
class Controller extends ContainerAware
{
请注意,没有定义 Controller::__construct,因此使用 parent::__construct 将无济于事。如果我们看看 ContainerAware:
namespace Symfony\Component\DependencyInjection;
class ContainerAware implements ContainerAwareInterface
{
protected $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
}
同样,在调用 setContainer 之前,没有构造函数并且容器不可用。所以覆盖 setContainer 并将你的逻辑放在那里。或者只是制作一个不扩展基本 Controller 类的独立 Controller ,并将您的依赖项直接注入(inject)构造函数。
2017 年 8 月更新
仍然有一些点击率。如果您真的想在每个 Controller 之前执行某些操作,请使用内核 Controller 监听器。如果您只需要用户,那么当然可以使用 getUser()。并且请不要覆盖 setContainer()。在某些情况下,它可以工作,但只会使您的代码复杂化。
关于php - Symfony2 - 如何在 Controller 中使用 __construct() 并访问 Securty.Context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9736598/
这是一个 javascript 安全问题:假设一个页面找出了计算机的屏幕分辨率,例如 1024 x 768,并希望使用 AJAX 调用将此数据记录到数据库中。 有没有办法真正防止将虚假数据输入数据库?
我在使用 Symfony2 时遇到了一些问题。即如何使用 __construct() 函数。官方文档非常糟糕! 我希望能够使用以下内容: public function __construct() {
我尝试关注有关 spring-security-core 2.0 的各种线程,但无法添加它。这是我收到的错误消息 | Error Resolve error obtaining dependencie
我是一名优秀的程序员,十分优秀!