没有完整堆栈框架的 Symfony 组件

2024-01-07

我在我的项目中使用 Symfony DI、Http、Kernel、Routing 创建您自己的 PHP 框架 (https://symfony.com/doc/current/create_framework/index.html https://symfony.com/doc/current/create_framework/index.html)。对于 is_leap_year 应用程序演示目的来说,这很好。

我试图弄清楚如何将服务和容器注入到仅使用 Symfony 组件而不是框架包的路由中定义的自定义控制器中。

容器.php

// add demo service into the service container
$containerBuilder->register('demo.service', '\Demo\DemoService');

// add dependent service into the controller container
$containerBuilder->register('dependent.controller', '\Demo\DemoController')
    ->setArguments([new Reference('demo.service')]);

// fetch service from the service container
// Echoing Works fine! But no service in controller
//echo $containerBuilder->get('dependent.controller')->helloWorld();

App.php

// nok with dependency
$routes->add('hello', new Routing\Route('/hello', [
    '_controller' => 'Demo\DemoController::helloWorld',
]));

// ok with no dependency
$routes->add('hello2', new Routing\Route('/hello2', [
    '_controller' => 'Demo\DemoService::helloWorld',
]));

和 DemoController.php

<?php declare(strict_types=1);

namespace Demo;

class DemoController
{
  private $demo_service;

  public function __construct(\Demo\DemoService $demoService)
  {
    $this->demo_service = $demoService;
  }

  public function helloWorld()
  {
    return $this->demo_service->helloWorld();
  }
}

Returns

Fatal error: Uncaught ArgumentCountError: Too few arguments to function Demo\DemoController::__construct(), 0 passed

我怎样才能让它发挥作用?或者,如何将容器注入到控制器构造函数中?

示例在这里https://github.com/Monnomcjo/symfony-simplex https://github.com/Monnomcjo/symfony-simplex


实际上你已经非常接近了,所以做得很好。我认为您将 ContainerAwareInterface 与 ContainerControllerResolver 建议混合在一起。确实是两个不同的概念。看起来您也尝试制作自己的 ControllerResolver 类,但您没有更新 container.php 来使用它。无论如何,此时不需要自定义解析器。

我还无意中误导了您,建议有一项名为“容器”的服务。它实际上被称为“service_container”。

# container.php
$containerBuilder->register('container_controller_resolver', HttpKernel\Controller\ContainerControllerResolver::class)
    ->setArguments([new Reference('service_container')]); 

$containerBuilder->register('framework', Framework::class)
    ->setArguments([
        new Reference('dispatcher'),
        new Reference('container_controller_resolver'), // Changed
        new Reference('request_stack'),
        new Reference('argument_resolver'),
        //new Reference('demo.service'), // No need for these
        //new Reference('dependent.controller'),
    ])
;

另外,按照惯例,一些框架服务使用 id,例如“框架”或其他类似的名称。但大多数时候,你的应用程序级别的东西应该只使用类名作为服务 ID。特别是您需要使用控制器类名来允许 ContainerControllerResolver 找到它。当您尝试使用容器的自动连接功能时,它也会很有用。

// add demo service into the service container
$containerBuilder->register(\Demo\DemoService::class, \Demo\DemoService::class);

// add dependent service into the controller container
$containerBuilder->register(\Demo\DemoController::class,\Demo\DemoController::class)
    ->setArguments([new Reference(\Demo\DemoService::class)]);

这应该可以做到。享受。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没有完整堆栈框架的 Symfony 组件 的相关文章

  • PHP 下载脚本输出损坏的文件

    我正在用 PHP 为我的 CMS 构建一个文件下载类 当时我注意到它以不同的编码格式输出文件 我尝试使用 readfile file get contents fread 但似乎都在做同样的事情 这就像与输出缓冲有关的东西 我使用脚本下载的
  • PHP 的password_verify() 是否可以抵御极长的密码(DoS 攻击)?

    一般攻击场景 2013 年 Django 存在一个普遍漏洞 攻击者可以通过非常大的密码创建极其密集的 CPU 计算 请参阅此处的安全通知 https www djangoproject com weblog 2013 sep 15 secu
  • SetInterval 函数不适用于 PHP 文件

    我有这样的index html
  • 包含来自 twig 的非 twig 文件

    我需要将文件的内容 在我的资源文件夹内 包含在 Twig 模板中 我尝试过这个但没有运气 include public directory file ext Twig没有这个能力吗 我不想使用Assetic 1 15版本新增 Twig 1
  • YUI压缩机或类似的PHP?

    我一直在我的测试服务器上使用 yuicompressor jar 来动态最小化已更改的 JavaScript 文件 现在我已经将网站部署到公共服务器上 我注意到服务器的策略禁止使用 exec 或其等效项 因此我不再执行 java 有没有一个
  • DataTables 第 2 页的分页未调用放大弹出窗口

    所以我有这个启用分页的数据表 我编码了一种方式 以便用户可以编辑表的行 当用户调用它在放大弹出窗口中打开的编辑页面时 它在第 1 页 从第 2 页起都运行良好 DataTable 及其前面停止调用 Magnific Popup 我只是不明白
  • Symfony 生成器形式、原则和 M:N 关系

    我有一个基本的 M N 设置 包含三个表 candidate position 和 Candidate position 这是 MySQL Workbench 的 ERD 屏幕截图 现在 我们继续讨论表单 在 symfony 生成器的默认世
  • 查明具有特定 ID 的会话是否已过期

    我正在创建一个上传功能 将用户上传的文件存储在服务器上 并以用户的会话 ID 作为名称 现在 我只想将此文件保留在服务器上 直到该会话处于活动状态 所以 我的问题是 如何根据会话 ID 确定会话是活动的还是过期的 以便在后一种情况下我可以安
  • 在 mysqli 准备好的语句程序风格中获取最后插入的 id 的正确方法是什么?

    我正在使用 mysqli 准备好的语句在表中插入记录 如下所示 link mysqli connect localhost my user my password world check connection if link printf
  • Apache 子进程已退出,状态为 255

    经过大量的搜索 尝试 修复 等待和哭泣 在我放弃之前 我想为这个错误抓住最后的机会 我们正在奔跑Microsoft Windows Server 2012 Apache 2 4 6 Win64 OpenSSL 1 0 1e PHP 5 5
  • 优雅地退出 Laravel 作用域

    我有一个范围 它根据用户角色以限制方式起作用 您可以将一组规则转发到限制数据库最终输出的范围 一个非常简化的角色限制示例 first name foo 只会返回其记录first name开始于foo 这实际上意味着我已禁止具有该角色的用户查
  • 彩色 var_dump() 和错误

    我怎样才能将样式设置为var dump 功能和PHP错误样式 如下图所示 目前我有下一个观点var dump with pre var dump pre 没有它将全部在一行中 并且只是纯文本的错误 我搜索了一些 PHP 颜色错误 var d
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • 如何从另一个数组值中过滤数组值并返回新数组? [复制]

    这个问题在这里已经有答案了 我有两个数组 all languages and taken languages 第一个包含所有语言 例如 200 种或其他语言 第二个包含之前选择的语言 从 0 到 200 种 我需要删除所有已采用的语言 ta
  • ASP.NET MVC 3 中嵌入的 PHP 站点的 IgnoreRoute

    我有一个带有嵌入式 WordPress 博客的 MVC 3 网站 以下所有 url 均通过 MVC 定向 www mysite com www mysite com aboutus www mysite com contactus 我还有一
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • PHP-如何根据条件配对数组中的项目

    如何将数组中的项目配对 假设我有一个数组Fighters 我想根据他们的情况将他们配对Weights 体重最接近的拳手应作为配对最佳匹配 但如果他们是在同一个团队中 他们不应该配对 团队 1 战斗机A体重为60 战斗机B体重为65 2队 战
  • 我如何向 Windows Server IIS 7 中的文件夹授予权限

    我是 PHP 和 Windows Server 新手 在查看我在 PHP 中创建的表单时遇到以下错误 Error in exception handler The stream or file C inetpub wwwroot wrp a
  • Mysql加密/存储敏感数据,

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • 捕获错误然后分支逻辑

    如何编写 R 代码 以便在发生错误情况时能够在代码中执行不同的路径 我正在使用一个容易引发错误的函数 当它遇到错误条件时 我想执行不同的函数 这是一个具体的例子 require SuppDists parms lt structure li
  • 使用 for 循环从列表中提取 data.frames

    我有一个列表 并且我已成功提取第一个矩阵的 data frame t using forecast t lt as data frame forecast t 我想知道是否可以使用以下方法对其余元素执行此操作 for i in t ws w
  • 如何在主函数中传递数组。带c++

    include
  • 为什么我找不到 ProgressiveMediaSource?

    看着ExoPlayer 文档 https exoplayer dev hello world html Hello World 示例表明要播放标准视频 您应该使用ProgressiveMediaSource 与我见过的许多在线教程相比 建议
  • 如何启用 Visual Studio 项目的 TypeScript 选项卡,该项目是控制台或自托管网页的 Windows 服务

    我使用 Visual Studio 2015 创建了一个控制台应用程序来使用嵌入的静态文件自行托管 Owin 由于 Visual Studio 不知道它是一个网站项目 因此它会忽略 TypeScript 文件 当我转到项目属性时 Web 项
  • 使用 EPplus 对每个单元格进行数据验证以检查该值是否可用

    我正在使用 Epplus 上传文件 我有两张 xlsx 格式的工作表 我想确保每个单元格都有值 例如 在我的 Excel 中 我有下拉框 如果用户在第一张工作表和第二张工作表中有详细信息是空的 但是这个空工作表只有一个值 该值是通过使用此下
  • 通过CSS将所有照片变成正方形

    我正在尝试将一系列照片制作成方形照片 它们可能是水平矩形 即 600x400 或垂直矩形 400x600 但我想让它们成为 175x175 我的想法是在较小的一侧设置 max height 或 max width 并且不允许在较大的一侧溢出
  • 添加列以选择 *

    在 SQL Server 中 我曾经做过类似的事情来向选择添加额外的列 select case when w1 start date lt w2 start date then to date w2 START date DD MM YYY
  • 在 Locust 中如何从一个任务获取响应并将其传递给其他任务

    我已经开始使用 Locust 进行性能测试 我想向两个不同的端点发出两个发布请求 但是第二个post请求需要第一个请求的响应 如何以方便的方式做到这一点 我已经尝试过如下但没有工作 from locust import HttpLocust
  • Windows Azure 存储表连接超时

    当长时间 几天 运行服务时 我收到来自 Windows Azure 表存储的连接超时异常 即使 get table api 也会返回此异常 为什么会出现这种情况 我该如何解决这个问题 除了 Gaurav 的回答之外 此问题的另一个常见原因是
  • Android 圆形图库或列表视图,具有放大和缩小选项

    我想要一个循环滚动的列表或图库 并且当前项目必须放大 其他项目必须缩小 如下 任何人都可以提供实施的好主意以及任何代码帮助吗 None
  • 不使用指针的递归数据结构

    在攻读计算机科学学士学位期间 我多次遇到过递归数据结构的使用 在 C 中 我总是最终使用指针来使数据结构递归 就像我在 C 中所做的那样 一个简化的示例如下 struct Tree int data struct Tree left rig
  • 执行 Docker Inspect 时如何获取 ENV 变量

    我想知道如何从 dockerspect 获取环境变量 当我跑步时 docker inspect f Config Env PATH 1e2b8689cf06 我得到以下信息 FATA 0000 template 1 9 executing
  • C++ 中的斑点检测

    我是计算机视觉方面的新手 但我需要在 C 中创建一个小功能 即使他上面印有东西 它也会检测一张白纸 并检索 4 个边缘坐标 这就是我真正需要的 这样我就可以使用这些坐标并剪切另一个 jpg 文件 并将剪切的图像用作 opengl 纹理 我不
  • Mac Sierra 中焦点跟随鼠标(无自动提升)

    我知道有关此主题的其他线程 但它们是基于自动引发的和 或所有答案都指向不再开发的软件 我只是在寻找这个简单的功能 Mac 上焦点跟随鼠标 无需自动提升 Zoooom2 能够执行此操作 但他们不再开发自己的软件 我没有使用终端 需要在具有多个
  • Logstash grok 测试与 rspec 有不同的行为?

    我正在为 grok 过滤器创建一个测试套件 有些日志由logstash 正确丰富 但不是rspec 测试 为了测试这一点 我启动了一个 Logstash 实例 其中包含 stdin stdout 和 json 用于输入和输出 这是示例日志
  • jquery ajax请求跨域时返回状态码0

    我正在尝试发出跨域请求 但服务器无法响应 Access Control Allow Origin 我正在尝试读取响应头 当我尝试读取状态代码或就绪状态时 它返回 0 我的 ajax 请求代码如下 ajax url https account
  • 使用scale_fill_manual手动分配颜色仅适用于某些六边形尺寸

    我正在尝试创建一个由六边形计数箱总结的散点图 我希望用户能够定义色标的计数中断 我有这个工作 使用scale fill manual 但奇怪的是 它只是有时有效 在下面的 MWE 中 使用给定的种子值 如果xbins 10 导致绘图存在以下
  • 在析构函数调用的哪一点,对象不再存在?

    当一个对象的析构函数被调用时 该对象在什么时候不再存在 它是在被调用的那一刻发生的吗 或者在完成删除函数内对象成员的内存之后 我主要问它是为了了解在其析构函数中调用对象的函数是否合法 在析构函数调用的哪一点 对象不再存在 对象的生命周期通过
  • 没有完整堆栈框架的 Symfony 组件

    我在我的项目中使用 Symfony DI Http Kernel Routing 创建您自己的 PHP 框架 https symfony com doc current create framework index html https s