Nano Hash - криптовалюты, майнинг, программирование

Как использовать symfony, twig и доктрину в контроллере внутри существующего проекта

Я использовал SymfonyCast на Symfony 4, чтобы попытаться соединить части. Я многое узнал о доктрине Symfony и twig, а также о среде, в которой они должны работать вместе. Однако это не то, на чем я должен основываться. Мне нужно построить внутри существующего проекта OpenEMR.

Я разместил свой код проекта здесь:

https://github.com/juggernautsei/symfony_twig_doctrine_component/blob/master/library/financialreports/src/FinancialSummaryByInsuranceController.php

Контроллер работает для загрузки шаблона ветки. Теперь я пытаюсь заполнить контроллер данными из базы данных. Я построил класс сущности и класс репозитория. Я просто не могу понять, что вставить в эту строку.

     public function getpaidata($insurerid)
      {
         $payments = $this->repository
     }

Чтобы получить доступ к классу в репозитории. IDE предложила код в классе репозитория.

public function getInsurerPaid(ArSession $insurerId)
{
    /*$insurerPaid = $this->_em->getRepository($this->_entityName)->findBy([
        "payer_id" => $insurerId
    ]);*/
    $insurerPaid = $this->findBy([
        'payer_id' => $insurerId
    ]);
    return $insurerPaid;
}

Но пока я ввожу код в контроллер, IDE PHPStorm ничего не предлагает. Итак, я застрял. Я попробовал предложенный код здесь

https://symfony.com/doc/2.0/book/doctrine.html#creating-an-entity-class https://symfonycasts.com/screencast/symfony-doctrine/repository

но ничего не говорит мне, как получить доступ к методу, который находится в классе репозитория.

ОБНОВЛЕНИЕ:

Метод getpaiddata() теперь изменен на

/**
 * @return Fully hydrated object.
 */
public function getpaidata($insurerid)
{
    $row = $this->repository->findBy([
        "payer_id" => $insurerid
    ]);

    return $row;
}

Ответы:


1

Проблема, скорее всего, в том, как вы получаете $this->repository. Если вы извлекаете его через диспетчер сущностей, через $this->_em->getRepository($entityName), как в прокомментированном фрагменте, возвращаемое значение имеет подсказку типа, которая сообщает IDE, что это просто общий EntityRepository, а не ваш пользовательский класс репозитория.

Вы можете установить Symfony-плагин для PhpStorm, который даст вам лучшее автодополнение, если ваша сущность имеет правильную аннотацию @Entity(repositoryClass="...").

В типичном приложении Symfony 4 вы также можете просто ввести правильный репозиторий вместо EntityManager, например. в вашем конструкторе:

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

Судя по всему, у OpenEMR есть собственный способ создания EntityManager с использованием Connector::instance(). Так что это, вероятно, не сработает для вас, к сожалению.

Другой способ обойти это - просто разместить подсказку типа над назначением вашей переменной:

/** @var App\Repository\PaidDataRepository $repository */
$repository = $this->_em->getRepository(PaidData::class)

или, поскольку у вас есть переменная класса, вы можете поместить туда аналогичную аннотацию.

05.11.2019
  • Это не было прямым решением моей проблемы, но я опубликую решение на git. Я слишком много думал об этом, и это было действительно просто. Перейдем к следующей проблеме в процессе сборки. 06.11.2019
  • @user1794918 user1794918 просто к вашему сведению, ваш код, скорее всего, не будет работать. getpaiddate() ничего не возвращает, поэтому $list всегда будет null здесь: github.com/juggernautsei/symfony_twig_doctrine_component/blob/. Сейчас это не большая проблема, потому что она не используется (пока), но позже могут возникнуть проблемы. Я не уверен, что это так, потому что код не завершен из-за проблемы, но я подумал, что упоминаю об этом, чтобы сэкономить вам время на отладку. 06.11.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..