【发布时间】:2021-10-18 11:07:41
【问题描述】:
已经在 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);
}
}
我也不知道如何在 symfony-5 中使用 symfony1 中的 BasePeer 和 SystemTrayPeer 类。我是否需要在 service.yaml 中添加 DatenUtils 类作为服务?
【问题讨论】:
标签: php symfony entitymanager