php - 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 类作为服务?
解决方案
您无法从static
方法访问类的属性,这就是您收到此错误的原因。
如果你正在重写你的应用程序,你应该考虑这个类的真正工作是什么。似乎它处理了太多不同的工作:)
推荐阅读
- swiftui - SwiftUI Thread 1:致命错误:每个布局项只能出现一次
- amazon-cognito - Amazon Cognito "RespondToAuthChallenge" - 返回 NotAuthorizedException、不正确的用户名或密码
- flutter - 在 Flutter 中执行 OnChanged 函数后调用 Future
- c# - 用 KeyCode 改变速度针
- ruby-on-rails - 在 Rails 中实现多数据库
- regex - Sublime:删除所有列中的部分行
- python - 我可以让 FastAPI 端点接收 json 或文件吗
- excel - Excel VBA UserForm 滚动条移动问题通过单击具有多个显示的 Windows 125%
- flutter - 在颤振块中使用松散耦合的本地数据存储库
- python - Django项目开发,代码异常,项目超载后自动定位异常到代码段