我有以下控制器:
namespace Acme\CompanyBundle\Controller;
use Symfony\Component\DependencyInjection\Container;
/**
* Company controller.
*
*/
class CompanyController extends Controller
{
protected $container;
public function __construct(Container $container)
{
$this->container = $container;
}
public function getData()
{
$userObj = $this->container->get('security.context')->getToken()->getUser();
}
}
在我的服务中。yml
文件,我已经注入了容器
类:
parameters:
acme.controller.company.class: Acme\ContainerBundle\Controller\CompanyController
services:
acme.controller.company:
class: %acme.controller.company.class%
arguments: [@service_container]
加载此控制器时,出现以下错误:
可捕获的致命错误:传递给Acme\CompanyBundle\Controller\CompanyController:的参数1::\uu construct()必须是Symfony\Component\DependencyInjection\Container的实例,未给定,在C:\wamp\www\Symfony\app\cache\dev\classes中调用。php位于第2785行,在C:\wamp\www\symfony\src\Acme\CompanyBundle\Controller\CompanyController中定义。php行。。。
正如您所看到的,这是一个简单的Container
对象注入到控制器中的过程,但会抛出很好的错误。这里有什么问题?
类似的问题发布在这里的另一个SO线程中。
永远不要在某个东西(服务、控制器或其他东西)中注入容器,而是尝试注入securityContext或通过上面建议的symfony控制器的助手方法访问它。
令牌它不是一个对象,只是因为控制器的路由可能不在防火墙下
默认情况下,路由看起来像这样:
cerad_player_wanabe_list:
pattern: /player-request/list
defaults:
_controller: CeradPlayerWanabeBundle:Player/PlayerList:list
Symfony\Component\HttpKernel\HttpKernel::handle($request)方法从请求对象中提取_controller属性。如果属性中有两个冒号,那么它会将属性转换为类名,并使用新操作符创建一个实例。如果实例实现了ContainerWareInterface,那么容器将被注入控制器实例。未使用您定义的控制器服务。因此,没有参数被传递给构造html" target="_blank">函数是错误的。
另一方面,如果_controller只有一个冒号,那么控制器将作为服务从容器中提取。没有检查ContainerWareInterface。由您通过服务定义注入依赖项。
这都记录在:http://symfony.com/doc/current/cookbook/controller/service.html
所以对于这个特殊的问题,你的路线应该是这样的:
cerad_player_wanabe_list:
pattern: /player-request/list
defaults:
_controller: acme.controller.company:action
这确实提出了一个问题,即为什么要将控制器定义为服务。默认方法已经完全满足了您的要求,因此您不会得到任何东西。
将服务定义为容器的基本原理是,您可以精确控制控制器使用的依赖关系。使控制器更容易理解和测试。
注入完整的容器几乎破坏了将控制器定义为服务的价值。
您不需要在控制器中注入容器,只要它们扩展了基本的Controller
类,您就可以这样做。
只要做:
namespace Acme\CompanyBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
/**
* Company controller.
*
*/
class CompanyController extends Controller
{
public function getData()
{
$userObj = $this->get('security.context')->getToken()->getUser();
}
}
我有我的spring错误控制器,我需要获得实际的异常类,这样我就可以打印堆栈跟踪和其他类似的东西。这是我的错误控制器 我知道这不多,但我需要Exception对象能够做一些额外的处理。 感谢任何事先的帮助!
我在进行贝宝支付时出现了经验错误。 致命错误:未捕获异常“PayPal\exception\PayPalConnectionException”,消息为“访问https://api.sandbox.paypal.com/v1/payments/payment时获得Http响应代码400”。在C:\xampp\htdocs\paypal\workload\third_party\vendor\pay
容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables 防火墙来进行管理和实现。iptables 是 Linux 上默认的防火墙软件,在大部分发行版中都自带。 容器访问外部网络 容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。 $sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 1 如果为 0,
我有这个MVC文件夹结构: 现在,在ProfileController.php中,我有: 在usermodel.php中,我有: 并使用Composer Psr4 I自动加载文件: 现在,当我需要路由我的URL时,我会采取行动: 我看到这个错误: >致命错误:未捕获错误:在C:\XAMPP\HTDOCS\CMS\Application\Catalog\Controller\ProfileContr
在我自制的PHP MVC框架中,我编写了一个小错误处理程序,它将PHP错误包装在异常中,然后抛出它。 然后使用注册。除了致命的错误(没有双关语)之外,这一切都很好。我的自定义错误处理程序仍被调用,但我无法捕获抛出的。 这种错误的一个例子是试图包含一个不存在的文件: 调用我的自定义错误处理程序并抛出异常,但代码永远不会到达“catch”块。相反,PHP会生成HTML(糟糕!): 警告:未捕获异常“E
我得到这个错误。我创建了一个按钮来更新表。当我点击按钮时,我得到一个错误。如何修复它? 致命错误:Uncaught ArgumentCounter错误:函数personel::update_form(),0的参数太少,在C:\xampp\htdocs\warehouse\panel\system\core\CodeIgniter中传递。php在第360行,C:\xampp\htdocs\wareh