Как я получаю адрес - PullRequest
       3

Как я получаю адрес

0 голосов
/ 04 октября 2018

Здесь я сталкиваюсь с небольшой проблемой с моим кодом в течение 2 дней, я новичок в Symfony.Я объясняю свою проблему: я показываю рекламу на странице, сегодня я только показываю их, но я хотел бы сделать систему немного более сложной, добавив карту и убедившись, что мои объявления отображаются с маркерами на карте.Я хотел бы преобразовать все адреса моих объявлений в долготу и ориентацию, чтобы иметь возможность интегрировать их в карту Google, за исключением того, что в моем контроллере я не могу получить адрес объявления.

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

Что я делаю Вот некоторые из моих контроллеров для отображения моих объявлений.

public function listAction(Request $request, $companies)
{
    $listCompanies = $this->getDoctrine()->getRepository(Advert::class)->getCompaniesHavingAdverts();

    $listName = array();
    foreach($listCompanies as $company){
        array_push($listName, $company["nameCompany"]);
    }

    if($companies){
        $adverts = $this->getDoctrine()->getRepository(Advert::class)->filterAdvertsByCompanyName($companies);
    }else{
        $adverts = $this
            ->getDoctrine()
            ->getRepository(Advert::class)
            ->createQueryBuilder('a')
            ->getQuery()
            ->getResult();
    }

    $paginator  = $this->get('knp_paginator');
    $pagination = $paginator->paginate(
        $adverts,
        $request->query->getInt('page', 1)/*page number*/,
        12 // LIMITE D'ANNONCE PAR PAGE
    );

    $form = $this->createFormBuilder(null)

        ->setMethod('GET')
        ->add('jobcategory', JobCategoryType::class,
            ['required' => false,
                'placeholder' => "Catégorie ",
                'attr'     => ['class' => 'form-control']])
        ->add('city', TextType::class, [
            'label' => 'Code Postal : *',
            'required' => false,
            'attr' => ['class' => 'form-control', 'placeholder' => "Ex : 75013 Paris, France"],
        ])
        ->add('company', ChoiceType::class,[
            'label' => 'Nom entreprise :',
            'placeholder' => "Nom entreprise ",
            'choices' => $listName,
            'choice_label' => function($company){
                return $company;
            },
            'required' => false,
            'attr' => ['class' => 'form-control', 'placeholder' => "Equipier ..."],
        ])
        ->add('Filtrer', SubmitType::class,
            ['attr'     => ['class' => 'btn btn-primary btn-block', 'style' => "width: 120px;"]])
        ->getForm();

    $form->handleRequest($request);

    if($form->isSubmitted()){
        $filter = $form->getdata();
        $ville = explode(",",$filter['city'])[0];
        $num = array_search($filter["company"],$listName);

        if($filter['company'] == null){
            $listCompanies[$num]["id"] = false;
        }

        $adverts = $this
            ->getDoctrine()
            ->getRepository(Advert::class)
            ->filterAdverts($ville, $filter['jobcategory'],$listCompanies[$num]["id"]);



        $paginator  = $this->get('knp_paginator');
        $pagination = $paginator->paginate(
            $adverts,
            $request->query->getInt('page', 1)/*page number*/,
            12// LIMITE D'ANNONCE PAR PAGE
        );
    }

    $adresseAdvert = $adverts->getPostalCode();
    $formattedAddrFrom = str_replace(',','+',$adresseAdvert);
    $formattedAddrFrom = urlencode($formattedAddrFrom);
    $geocodeFrom = file_get_contents('https://maps.google.com/maps/api/geocode/json?address='.$formattedAddrFrom.'&sensor=false&key=');
    $outputFrom = json_decode($geocodeFrom);
    $latitudeFrom = $outputFrom->results[0]->geometry->location->lat;
    $longitudeFrom = $outputFrom->results[0]->geometry->location->lng;

     return $this->render('App/Student/adverts.html.twig', [
        'adverts' => $pagination,
        'form' => $form->createView(),
        'pagination' => $pagination,
         'lat' => $latitudeFrom,
         'lng' => $longitudeFrom
    ]);
}

Что я хочу Если происходит сбой, во время восстановления используется адрес объявления "$ addressAdvert = $ adverts-> getPostalCode ();"это заставляет меня думать, что мы не можем получить таблицу (которую я полностью понимаю, потому что он не знает, по какому адресу и с какого объявления).

Удары, я не знаю как.Чтобы отобразить рекламу, у меня есть {% для рекламы в объявлениях%}, а затем я показываю рекламу с карточками.

Большое спасибо!(Извините за мой плохой английский)

1 Ответ

0 голосов
/ 04 октября 2018

Я должен быть честным, я не совсем понимаю, о чем вы спрашиваете.В общем, на вопросы с шаблоном «вот мой код, и я не знаю, что не так. Как я могу это исправить?», Ответить нелегко, но я сделаю все возможное, чтобы помочь вам.

Неизвестная таблица 'a'?

Насколько я понимаю, вы получаете сообщение об ошибке, похожее на "Невозможно получить таблицу"?Это звучит для меня как ошибка, связанная с базой данных.Вы убедились, что все ваши взаимодействия с базой данных успешны?

(Вы можете напечатать информацию в вывод с помощью var_export($variable);, чтобы проверить ее в своем браузере. Не идеально, но это может помочь.)

В строке 16 вы пишете ->createQueryBuilder('a'), мне это кажется подозрительным.Вы уверены, что это «а», или вы должны передать имя таблицы здесь?

Пагинация

В нескольких местах вы пишете

$pagination = $paginator->paginate(
    $adverts, 
    /* page number */, 
    /* items per page */
);

$adverts представляется списком рекламных объявлений (отсюда и название).

Мне кажется, что эта функция paginate() возвращает соответствующий раздел вашего списка рекламных объявлений;$adverts.Возможно, вам следует использовать $pagination вместо $adverts в оставшейся части этой функции / метода.

Если только я неправильно понял, что делает paginate(), но вы не включили ни одну из вызываемых функций вВаш вопрос, я не могу сделать лучше, чем сделать обоснованное предположение.

Доступ к функции-члену из массива вместо ее элементов.

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

$adresseAdvert = $adverts->getPostalCode();

Вы уверены, что это правильно?Мне кажется, вы пытаетесь получить доступ к почтовому индексу с одного адреса, а $adverts - во множественном числе.Возможно, это должно быть:

$adresseAdvert = $adverts[0]->getPostalCode(); // index 0 of array $adverts

Как задать лучший вопрос

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

Вопрос переполнения стека, касающийся фрагмента кода, обычно имеет«минимальный рабочий пример»;то есть: копия кода, который вы отлаживаете, но опускаете как можно больше не связанных между собой вещей.Часто, как я обнаружил, при создании такого минимального примера эта ошибка проявляется естественным образом, поэтому ее обязательно стоит попробовать!:)

Если вы хотите несколько советов о том, как задать лучший вопрос, посмотрите здесь: https://stackoverflow.com/help/how-to-ask

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...