模型/控制器之外的 Symfony2 getdoctrine

2023-12-31

我正在尝试在控制器之外获取 getDoctrine() 。 我创建了这项服务:

配置/服务.yml

services:
  update_command:
    class: project\projBundle\Command\Update
    arguments: ['@doctrine.orm.entity_manager']

在我的 app/config/config.yml 中

imports:
    - { resource: "@projectprojBundle/Resources/config/services.yml" }

所以和我想使用的类:

namespace project\projBundle\Command;
use Doctrine\ORM\EntityManager;

class Update {
    protected $em;
    public function __construct(EntityManager $em) {
        $this->em = $em;
    }

但每次我想这样做:(我这样做对吗?)

$up = new Update();

我收到这个错误:

Catchable Fatal Error: Argument 1 passed to ...\Update::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in .../Update.php line 7  

简单的解决方案

如果您正在实现 Symfony 命令(可以在 cron 选项卡中执行),您可以从该命令访问服务容器。

<?php
namespace MyProject\MyBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Doctrine\ORM\EntityManager;

use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class UpdateCommand extends ContainerAwareCommand
{
    protected $em;

    protected function configure()
    {
        $this->setName('myproject:mybundle:update') ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $this->em = $this->getContainer()->get('doctrine.orm.entity_manager');
    }
}

这样,您可以从命令获取实体管理器,并且不需要将此类声明为服务。因此,您可以删除在services.yml file.

另一种解决方案(更清洁)

该解决方案可以更好地分离关注点,因此可以轻松进行单元测试并在 Symfony 应用程序的其他部分中重用(不仅仅是作为命令)。

将“更新”命令的所有逻辑部分移至您将声明为服务的专用类:

<?php
namespace MyProject\MyBundle\Service;

use Doctrine\ORM\EntityManager;

class MyUpdater
{
    protected $em;

    public function __construct($em)
    {
        $this->em = $em;
    }

    public function runUpdate()
    {
        // All your logic code here
    }
}

将其声明为您的服务services.yml file:

services:
    myproject.mybundle.myupdater:
        class: MyProject\MyBundle\Service\MyUpdater
        arguments: ['@doctrine.orm.entity_manager']

只需从您的命令调用您的服务:

<?php
namespace MyProject\MyBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;

use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class UpdateCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this->setName('myproject:mybundle:update') ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $myUpdater = $this->getContainer()->get('myproject.mybundle.myupdater');
        $myUpdater->runUpdate();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模型/控制器之外的 Symfony2 getdoctrine 的相关文章

  • 使用 Doctrine NestedSet 进行面包屑导航

    我有一个实现 NestedSet 行为的模型 Page actAs NestedSet hasManyRoots true rootColumnName root id columns slug string 255 name string
  • 覆盖默认标识符生成策略对关联没有影响

    交响乐 2 7 2 学说 ORM 2 4 7 MySQL 5 6 12 PHP 5 5 0 我有一个具有自定义 ID 生成器策略的实体 它工作完美 在某些情况下 我必须使用 手工制作 的 ID 来覆盖此策略 当主实体在没有关联的情况下被刷新
  • FOSUserBundle 密码验证

    我正在尝试覆盖 FOSUserBundle 中当前的密码验证 我尝试了几种选择 但仍然找不到解决方案 为了增加密码的 MinLength 我创建了一个validation yml src Acme UserBundle Resources
  • 在 Symfony 序列化中更改序列化属性名称

    我正在使用 Symfony 序列化器 效果很好 use Symfony Component Serializer Annotation Groups Groups default notification public function g
  • 如何从实体内部获取Web目录路径?

    我研究了如何用 Doctrine 处理文件上传 http symfony com doc current cookbook doctrine file uploads html我不想硬编码 DIR web this gt getUpload
  • 学说 dbal querybuilder 作为准备好的语句

    我正在尝试创建一个 Doctrine DBAL 查询生成器对象并在其中设置一个参数 使用 postgres db dbal 2 3 4 原则 connection this gt em gt getConnection qb connect
  • 无法打开输入文件应用程序/控制台

    我安装了 wamp 服务器和 Symfony2 框架的副本 我正在尝试使用以下命令创建一个捆绑包 php app console generate bundle nampespace IDP IDP Bundle format yml 我的
  • 有没有一种简单的方法可以在 Symfony 中获取 ServerName?

    我一直在寻找一种简单的方法来获取 Symfony 在 Symfony 中运行的机器的 ServerName 以便我的应用程序在具有不同 ServerName 的主机上使用时进行调整 但我找不到 我在 app yml 中创建了一个变量并获取它
  • 为什么将 Ubuntu 升级到 22.04 后 phpMyAdmin 停止工作?

    刚刚升级到 Ubuntu 22 04 现在我的 phpmyadmin 无法加载 我收到以下错误 解析错误 语法错误 usr share php Symfony Component DependencyInjection ContainerB
  • 类别树的路由

    我正在使用Tree http www gediminasm org article tree nestedset behavior extension for doctrine 2类别树的学说扩展并希望有如下路线 cat subcat1 s
  • vagrant box速度慢,如何改进?

    我们已经为我们的开发盒构建了一个 vagrant box 但我们面临着一些延迟问题 Issues Assetic 手表速度很慢 app dev php 中的整体应用程序访问速度很慢 在 vagrant box 的共享文件夹中使用 查找 命令
  • 在 Symfony2 中测试 AJAX/XMLHttpRequest 页面功能

    是否可以在 symfony2 测试中模拟 发出 XMLHttpRequest 请求 ajax 使用 Problematic 答案搜索后 正确的语法是 crawler client gt request GET foo array array
  • 在 Symfony2 dev env 控制器中捕获 swiftmailer 异常

    我不知道为什么我没有在我的控制器中捕获 Swiftmailer 的异常 我做错了什么 或者错过了什么 在控制器中我有 try this gt get mailer gt send email catch Swift TransportExc
  • Symfony2 的 mongoDB 返回一个可记录游标而不是我的实体

    我目前使用 DoctrineMongoDbBundle 向我的 mongodb 数据库发出请求 这是我的控制器中的调用 dm this gt get doctrine odm mongodb document manager entitie
  • Doctrine2 批量插入

    是否可以使用单个查询将多个实体插入数据库 当我使用一个例子时here http docs doctrine project org projects doctrine orm en 2 0 x reference batch process
  • 如何像格式化数组一样使用 monolog 记录多行条目?

    我正在尝试记录一个数组monolog in symfony logger this gt get logger logger gt info print R user true 我得到的输出未格式化为 print r 预期的格式 它将所有内
  • 在奏鸣曲管理列表顶部显示订单总数

    根据特定条件进行筛选后 在页面顶部显示销售交易金额总额 如果页面不止一页 这应该是所有页面的总和 有人可以指导我如何做到这一点 我们按照以下方式做到了 效果非常好 Step 1 orderAdmin中添加了两个方法 public funct
  • symfony2 选择单选框的默认值

    我的项目是使用 Silex 和 Symfony 组件 即表单组件 编写的 我尝试创建一组从类中构建的单选按钮 并且我想预先选择其中一个单选按钮 我创建这样的表格 form app form factory gt createBuilder
  • Symfony php.ini Debian

    我在 Oracle VM VirtualBox 上使用 Debian 7 amd64 LAMP 服务器 我正在尝试安装 Symfony 但遇到了一些小问题 当我运行命令时 php my project name app check php
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f

随机推荐

  • python3 --version 显示“NameError:名称'python3'未定义”[重复]

    这个问题在这里已经有答案了 当我们打字时 python3 version or V 它应该向我们显示 python 的版本 对吗 但是 当我这样做时 我收到以下错误 NameError 名称 python3 未定义 当我尝试使用安装 pip
  • 如何知道寄存器变量存储在哪里?

    我知道寄存器变量存储在CPU寄存器中 如果 CPU 寄存器忙 满 则相同的变量将存储在堆栈中 我怎么知道变量是存储在堆栈还是CPU寄存器中 不 你不能 它由编译器决定 并且可能会在编译之间发生变化 例如 如果周围的代码更改了套准压力 htt
  • jQuery every - 将 (this) 与类规范相结合

    我正在尝试循环浏览一些表行 简化后的行如下 table tr td class ucf text td tr table
  • Android 2.0 中的分辨率支持

    收到我的第一个 Motorola Droid 用户发来的电子邮件 Android 2 0 中引入的新 480x854 分辨率 而不是 320x480 对我的用户界面造成了严重破坏 一切都变得更小并且位置不佳 我的印象是 如果我们遵循 XML
  • 当 recyclerview 滚动/滑动到顶部时展开 appbarlayout

    我使用 recyclerview 实现了 collapsingtoolbar 布局 如所附示例代码所示 我的问题是 当我向下拖动列表时 它不会一直到达顶部 发生的情况是 滚动恰好在 AppBarLayout 应该结束的地方停止 我想要的效果
  • Docker Desktop Windows 和 VPN - 容器内没有网络连接

    我尝试在连接到 VPN 的同时在 Windows 上使用 Docker 当 VPN 未连接时 一切正常 但是 当我使用 Cisco AnyConnect 客户端连接到我们的企业 VPN 时 docker 容器内的网络不再工作 docker
  • 如何捕捉 RecyclerView 项目,以便将每个 X 项目视为一个要捕捉的单元?

    背景 可以使用以下方法将 RecyclerView 捕捉到其中心 LinearSnapHelper attachToRecyclerView recyclerView Example MainActivity kt class MainAc
  • 通过 pip 安装 pyinstaller 导致“无法创建进程”

    有谁知道为什么pyinstaller通过安装后立即失败pip via anaconda 32bit 我通过安装 pyinstallerpip install pyinstaller通过Windows 64位上的anaconda命令提示符使用
  • 通过jsp中的路径从数据库中检索文件

    我想按存储在数据库表中的路径 本地服务器路径 下载文件 我已经完成了编码部分以在 html 表中查看数据库 但我不知道如何超链接该表以便从存储在服务器中的输出文件夹下载文件 任何类型和大小 这是jsp代码
  • Docker:如何将 sqlite 数据库更改保留到数据库文件中?

    FROM golang 1 8 ADD go src beginnerapp RUN go get u github com gorilla mux RUN go get github com mattn go sqlite3 RUN go
  • 未找到数据库“C:/data/sample”,并且 IFEXISTS=true,因此我们无法自动创建它 - Spring Boot 中的错误

    我创建了一个 Spring Boot 应用程序来连接 h2 数据库 这样做时 它会抛出一个错误 显示未找到数据库 请帮助我找到我可以实施并解决问题的解决方案 我在 pom xml 文件中添加了 com h2database 依赖项 然后它也
  • python 函数中的形式参数和实际参数[重复]

    这个问题在这里已经有答案了 我对如何识别递归函数中的形式参数和实际参数感到有点困惑 例如 在这段用于获取数字阶乘的代码块中 def factorial n if n 1 return 1 else return n factorial n
  • WCF 主体权限属性异常日志记录

    我有一个 WCF 服务 其中包含带有 PrimaryPermission 属性的方法 当没有适当权限的用户尝试访问这些方法时 属性会抛出 SecurityException 但由于异常是在属性中引发的 因此无法在调用周围放置 try cha
  • cloud-init 忽略静态 IP 网络配置

    我运行 Ubuntu 18 04 云映像并尝试通过 cloud init 配置网络 由于某种原因 当我尝试分配静态 IP 时 它会忽略我的网络 然后转而使用 DHCP 我不知道为什么 也不知道如何调试它 有谁知道我是否做错了什么或者我应该如
  • opencl中的主机是什么?

    我现在开始学习openCL 我现在正在做教程 但我无法真正理解主机的想法 有人可以解释吗 谢谢 OpenCL 是一个旨在支持大规模并行处理的系统 例如可以由现代图形芯片 GPU 执行的处理 在 OpenCL 范例中 主机程序 是执行基于 G
  • 具有周期性边界条件的最近邻搜索

    在一个立方体盒子里 我有一个很大的 R 3 集合点 我想找到每个点的 k 个最近邻 通常我会考虑使用 k d 树之类的东西 但在这种情况下我有周期性边界条件 据我了解 k d 树的工作原理是将空间切割成一维较少的超平面 即在 3D 中 我们
  • 块数组?

    对我来说 这似乎是一种非常奇怪的交互 但同时它不仅有效 而且在此过程中不会抛出任何警告或错误 只是希望更好地理解一般的块以及为什么这样的事情可能是对的或错的 有什么理由不应该做这样的事情吗 NSArray array NSArray arr
  • Xamarin 自定义 UITableViewCell 抛出系统 NullReferenceException

    我正在为 iOS 创建一个 Xamarin 应用程序 并将 UITableViewCell 添加到故事板以赋予它我自己的风格 我确实向这个自定义 UITableViewCell 添加了一个类 即 MainMenuCell 我向单元格添加了两
  • BeginRequest 事件未在我的 httpmodule 中触发

    我有一个 httpmodule 但自从迁移应用程序 NET 4 以来 一直遇到一些奇怪的行为 BeginRequest 事件不会在某些请求上触发 但在其他请求上会触发 到目前为止 我还没有设法找出何时触发和不触发的模式 EndRequest
  • 模型/控制器之外的 Symfony2 getdoctrine

    我正在尝试在控制器之外获取 getDoctrine 我创建了这项服务 配置 服务 yml services update command class project projBundle Command Update arguments d