首页 > 解决方案 > Symfony 无法访问自定义类/方法中的 EntityManager

问题描述

已经在 symfony-1 中创建的自定义类 dataUtils。我正在尝试在 symfony-5 中重新创建相同的类。当我尝试访问 entityManager 时,它显示“不能在非对象上下文中使用 $this”。我附上了代码供参考。

<?php

namespace App\Model;

class DateUtils {

    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;

        parent::__construct();
    }

    public static function executeQuery($connection_param_name, $query, $values = array(), $connection = null, $charset_to = null, $i = 0) 
    {
        $em = $this->entityManager; // error (cannot use $this in a non-object context)
        
        if (!sizeof($values)>0 and stripos(strtolower($query), "where")!==false)
        {
            $filesystem = new Filesystem();
            $filesystem->dumpFile("log.txt", $query);
        }
        
        try {
            
            $connection = (! $connection) ? $em->getConnection($connection_param_name) : $connection;
            if ($charset_to == 'utf-8') {
                self::converToUtf8 ( $connection );
            }
            if ($charset_to == 'latin1') {
                self::converToLatin1 ( $connection );
            }
            if ($charset_to == 'latin2') {
                self::converToLatin2 ( $connection );
            }
            if ($charset_to == 'latin5') {
                self::converToLatin5 ( $connection );
            }

            $resultset = $connection->createQuery($query);
            foreach ($values as $key => $value){
                $resultset->bindValue($key, $value);
            }
            $resultset->execute();

        } catch (\Doctrine\ORM\ORMException $e) {
            $i++;
            if((strpos($e->getMessage (), 'Deadlock') !== false || strpos($e->getMessage (), 'Lock wait timeout exceeded') !== false) && $i < 12){
                $sleep = rand ( 1 , 5000 );
                usleep($sleep);
                return self::executeQuery($connection_param_name, $query, $values, $connection, $charset_to, $i);
            }elseif(strpos($e->getMessage (), 'Base table or view not found') !== false && strpos($e->getMessage (), 'st_user_value_berechnung_tmp') !== false && $i < 11){
                return self::executeQuery($connection_param_name, $query, $values, $connection, $charset_to, $i);
            }else{
                $sendMessage = gethostname () . ' - DataUtils:executeQuery: ' . $e->getMessage () . ' - ' . $query . ' - '.serialize($values);
                SystemTrayPeer::log ( 'err', $sendMessage, 'databank-errors', 2 );
            }
        }
        return (isset($resultset) ? $resultset : false);
    }
    
    
    
    
    
}

我也不知道如何使用 symfony1 中的 BasePeer 和 SystemTrayPeer 类在 symfony-5 中使用。我是否需要在 service.yaml 中添加 DatenUtils 类作为服务?

标签: phpsymfonyentitymanager

解决方案


您无法从static方法访问类的属性,这就是您收到此错误的原因。

如果你正在重写你的应用程序,你应该考虑这个类的真正工作是什么。似乎它处理了太多不同的工作:)


推荐阅读