首页 > 解决方案 > 我如何获得地址

问题描述

在这里,我的代码遇到了 2 天的小问题,我是 Symfony 的新手。我解释了我的问题:我在页面上显示广告,今天我只显示它们,但我想通过添加地图使系统有点像 airbnb,并确保我的广告在地图上显示带有标记。我想将我的广告的所有地址转换为长度和态度,以便能够将它们集成到谷歌地图中,​​除了在我的控制器中我无法获得广告的地址。

我非常认真地认为这是一个愚蠢的问题,但是,不幸的是,我进行了研究,但找不到解决方案。

我所做 的这里是我的一些控制器来显示我的广告。

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();” 这让我觉得我们无法获得一张桌子(我完全理解,因为他不知道哪个地址来自哪个广告)。

打击不知怎么了。在显示广告的视图中,我有一个 {% for adverts in adverts%} 然后我用卡片显示广告..

非常感谢 !(对不起,我的英语不好)

标签: phpsymfony

解决方案


老实说,我不太明白你在问什么。一般来说,“这是我的代码,我不知道哪里出了问题。我该如何解决?”这样的问题不容易回答,但我会尽力帮助你。

未知表'a'?

据我了解,您收到类似于“无法获取表格”的错误?在我看来,这听起来像是与数据库相关的错误。您是否验证了所有数据库交互都成功?

(您可以将信息打印到输出中var_export($variable);以在浏览器中检查它。不理想,但它可能会有所帮助。)

在第 16 行,你写->createQueryBuilder('a'),这对我来说似乎很可疑。你确定'a'就是那个意思,还是应该在这里传递表名?

分页

在几个地方,你写

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

$adverts似乎是一个广告列表(因此得名)。

在我看来,这个paginate()函数会返回您的广告列表的相关部分;$adverts. 也许您应该在此函数/方法的其余部分中使用$pagination而不是。$adverts

除非我误解了什么paginate(),但由于您没有在问题中包含任何被调用的函数,所以我只能做出有根据的猜测。

从数组而不是其元素访问成员函数。

另一个可疑的代码行是第 80 行,您提到您的代码失败:

$adresseAdvert = $adverts->getPostalCode();

你确定这是正确的吗?在我看来,您正试图从单个地址访问邮政编码,而 while$adverts是复数。也许这应该是:

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

如何提出更好的问题

希望以上对你有所帮助。下次,请尝试提出一个更好的问题。像这样的问题很难回答,正如你所见,答案最终是基于我们所掌握的少量信息的随机猜测。

一个关于一段代码的 Stack Overflow 问题,通常有一个“最小的工作示例”;即:您正在调试的代码的副本,但尽可能多地省略不相关的内容。通常,我发现,在创建这样一个最小的示例时,错误会自然而然地出现,所以绝对值得一试!:)

如果您想要一些关于如何提出更好问题的提示,请查看此处: https ://stackoverflow.com/help/how-to-ask


推荐阅读