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

Получите данные от двух разных моделей в одном контроллере в TYPO3 extbase

Я новичок в «новой» среде extbase MVC на TYPO3.

Я пытаюсь создать простую форму с двумя селекторами: один для «Школ» и один для «Программы».

Я создал обе модели с помощью Extension Builder и могу перечислить все школы и все программы в соответствующих шаблонах списка.

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

Я хочу, чтобы этот код в шаблоне работал:

<f:form name="form">
        <f:form.select name="form" options="{schools}" optionValueField="uid" optionLabelField="school" />
        <f:form.select name="form" options="{programs}" optionValueField="uid" optionLabelField="program" />
    </f:form>

И мой скелет контроллера:

/**
 * action show
 *
 * @param \Vendor\Extension\Domain\Model\Form $form
 * @return void
 */
public function showAction(\Vendor\Extension\Domain\Model\Form $form) {

       // Some code        
       $this->view->assign('schools', $schools);

       // Some code
       $this->view->assign('programs', $programs);

}

Ответы:


1

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

Чтобы использовать оба репозитория в вашем контроллере, вы должны использовать внедрение зависимостей . Начиная с ExtBase 4.7 вы можете просто использовать аннотацию @inject для внедрения объекта путем внедрения зависимостей.

Добавьте в свой контроллер следующее:

/**
 * School repository
 *
 * @var \Vendor\Extension\Domain\Repository\SchoolRepository
 * @inject
 */
 protected $schoolRepository;

/**
 * Program repository
 *
 * @var \Vendor\Extension\Domain\Repository\ProgramRepository
 * @inject
 */
 protected $programRepository;

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

Тогда ваше действие выглядит следующим образом:

/**
 * action show
 *
 * @param \Vendor\Extension\Domain\Model\Form $form
 * @return void
 */
public function showAction(\Vendor\Extension\Domain\Model\Form $form) {
       $schools = $this->schoolRepository->findAll();
       $programs = $this->programRepository->findAll();

       $this->view->assign('schools', $schools);
       $this->view->assign('programs', $programs);
}

Теперь в вашей форме должны отображаться оба поля выбора со всеми записями из школьного и программного репозитория.

16.01.2014
  • Спасибо! Это была недостающая часть. 16.01.2014
  • Новые материалы

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

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

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

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

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

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

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