【问题标题】:How I getting the address我如何获得地址
【发布时间】:2018-10-04 14:49:33
【问题描述】:

在这里,我的代码遇到了 2 天的小问题,我是 Symfony 的新手。 我解释了我的问题:我在页面上显示广告,今天我只显示它们,但我想通过添加地图使系统有点像 airbnb,并确保我的广告在地图上显示带有标记。我想将我的广告的所有地址转换为长度和态度,以便能够将它们集成到 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();”这让我觉得我们无法获得一张桌子(我完全理解,因为他不知道哪个地址来自哪个广告)。

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

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

【问题讨论】:

    标签: php symfony


    【解决方案1】:

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

    未知表'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();
    

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

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

    如何提出更好的问题

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 2021-07-10
      • 1970-01-01
      • 2014-05-06
      • 2023-03-28
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多