Arhn - архитектура программирования

Symfony3, Doctrine2, загрузчик пользовательских фикстур

Я пытаюсь создать собственное приспособление, которое будет брать данные из файла csv, анализировать их определенным образом, создавать объекты, вставлять данные и сбрасывать их в базу данных.

Моя проблема в том, что мой файл находится в AppBundle/Command, и я не знаю, как получить доступ к менеджеру, чтобы сохранить и очистить мой файл .

Итак, мой вопрос: Как мне получить доступ к менеджеру доктрины?

<?php

namespace AppBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Doctrine\Common\Persistence\ObjectManager;
use AppBundle\Entity\Country;

class LoadFixturesCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this->setName('app:load-fixtures'));
    }
    protected function execute(InputInterface $input, OutputInterface $output)
    {

        // file path
         $csvfile = '/home/amarui/Documents/studyin/country.csv';
        // if opened
        if (($handle = fopen($csvfile, 'r')) !== false) {

            // read line and breakes at semicolon(;)
            while (($line = fgetcsv($handle, 1000, ';', '"')) !== false) {

                $counter = 0;
                $i = 0; // counter for the array elements
                $city{$counter} = new Country();

                // read elements from breakpoint(;)
                foreach ($line as $value) {
                    // if the element has a comma(,)
                    if (strstr($line[$i], ',')) {
                        // breaks at comma(,)
                        $line[$i] = explode(',', $line[$i]);
                        // reads elements from the breakpoint(,)
                        foreach ($line[$i] as $multiple) {
                        // echo '<br /> count'.$i.' '.$multiple;
                        // TODO: 
                        }
                    } else {
                        // echo '<br /> count'.$i.' '.$value;
                        if ($i = 0) {
                            $city{$counter}->setName($value);
                        }
                    }
                    $i += 1; // next element in the array
                    $counter += 1; // updates the variable name
                    $this->getDoctrine()->getManager()->persist($city{$counter});
                }
            }
        }
        $this->getDoctrine()->getManager()->flush();
    }
}

Вот какую ошибку выдает

[Symfony\Component\Debug\Exception\FatalThrowableError]  
  Fatal error: Call to undefined method AppBundle\Comm     
  and\LoadFixturesCommand::getDoctrine()  

Трассировки стека

[2016-02-29 11:55:44] php.CRITICAL: Fatal error: Call to undefined method AppBundle\Command\LoadFixturesCommand::getDoctrine() {"type":1,"file":"/home/amarui/Dev/student360/src/AppBundle/Command/LoadFixturesCommand.php","line":60,"level":32767,"stack":[{"file":"/home/amarui/Dev/student360/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php","line":256,"function":"execute","class":"AppBundle\\Command\\LoadFixturesCommand","type":"->","args":["[object] (Symfony\\Component\\Console\\Input\\ArgvInput: 'app:load-fixtures')","[object] (Symfony\\Component\\Console\\Output\\ConsoleOutput: {})"]},{"file":"/home/amarui/Dev/student360/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php","line":803,"function":"run","class":"Symfony\\Component\\Console\\Command\\Command","type":"->","args":["[object] (Symfony\\Component\\Console\\Input\\ArgvInput: 'app:load-fixtures')","[object] (Symfony\\Component\\Console\\Output\\ConsoleOutput: {})"]},{"file":"/home/amarui/Dev/student360/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php","line":186,"function":"doRunCommand","class":"Symfony\\Component\\Console\\Application","type":"->","args":["[object] (AppBundle\\Command\\LoadFixturesCommand: {})","[object] (Symfony\\Component\\Console\\Input\\ArgvInput: 'app:load-fixtures')","[object] (Symfony\\Component\\Console\\Output\\ConsoleOutput: {})"]},{"file":"/home/amarui/Dev/student360/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php","line":86,"function":"doRun","class":"Symfony\\Component\\Console\\Application","type":"->","args":["[object] (Symfony\\Component\\Console\\Input\\ArgvInput: 'app:load-fixtures')","[object] (Symfony\\Component\\Console\\Output\\ConsoleOutput: {})"]},{"file":"/home/amarui/Dev/student360/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php","line":117,"function":"doRun","class":"Symfony\\Bundle\\FrameworkBundle\\Console\\Application","type":"->","args":["[object] (Symfony\\Component\\Console\\Input\\ArgvInput: 'app:load-fixtures')","[object] (Symfony\\Component\\Console\\Output\\ConsoleOutput: {})"]},{"file":"/home/amarui/Dev/student360/bin/console","line":29,"function":"run","class":"Symfony\\Component\\Console\\Application","type":"->","args":["[object] (Symfony\\Component\\Console\\Input\\ArgvInput: 'app:load-fixtures')"]}]} 

Ответы:


1

У вас нет вспомогательного метода getDoctrine() в команде (вместо этого он существует в контроллере, если он унаследован от Symfony\Bundle\FrameworkBundle\Controller\Controller).

попробуй с

$this->getContainer()->get('doctrine')

вместо

$this->getDoctrine()

Надеюсь, это поможет

29.02.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..