2

私はSymfony2にかなり慣れていません。何が起こっているのかわかりません。このコード (バンドルを検出できるかどうかをテストするように設定):

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Ivory\GoogleMap\Overlays\Animation;
use Ivory\GoogleMap\Overlays\Marker;

class DefaultController extends Controller {

public function mapAction() {
    $map = $this->get ( 'ivory_google_map.map' );
        return $this->render ( 'KrewMediaLocalFarmBundle:Default:map.html.twig', array('map' => $map) );
  }
}

このコード (データを使用してマップをレンダリングするためのコントローラーの埋め込みを含む実際のコード) の間、単純なマップをレンダリングします。

<?php
// localfarm/src/KrewMedia/Bundle/LocalFarmBundle/Controller/DefaultController.php
namespace KrewMedia\Bundle\LocalFarmBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Ivory\GoogleMap\Overlays\Animation;
use Ivory\GoogleMap\Overlays\Marker;

class DefaultController extends Controller {

public function mapAction() {
    //$map = $this->get ( 'ivory_google_map.map' );
        return $this->render ( 'KrewMediaLocalFarmBundle:Default:maptest.html.twig');
  }
}

このエラーが表示されます:「テンプレートのレンダリング中に例外がスローされました(「バンドル "LocalFarmBundle" が存在しないか、有効になっていません。AppKernel.php ファイルの registerBundles() メソッドに追加するのを忘れた可能性があります。 ?") KrewMediaLocalFarmBundle:Default:maptest.html.twig の 3 行目。"

maptest.html.twig と map.html.twig はどちらも LocalFarmBundle の同じフォルダーにあります。バンドルがコードの最初の部分で見つかったのに、2 番目のコードで見つからなかったのはなぜだろうか。関連するルーティングはこれです

krew_media_local_farm_homepage:
    pattern:  /index
    defaults: { _controller: KrewMediaLocalFarmBundle:Default:index }

krew_media_local_farm_map:
     pattern:  /map
     defaults: { _controller: KrewMediaLocalFarmBundle:Default:map }

krew_media_basic_map:
     pattern:  /map/basic
     defaults: { _controller: KrewMediaLocalFarmBundle:Map:basic }

map.html.twig:

{{ google_map_container(map) }}

{{ google_map_js(map) }}

maptest.html.twig:

Map Test

{% render(controller( 'LocalFarmBundle:Map:basic')) %} 

「LocalFarmBundle:Map:basic」のコントローラー:

public function basicAction() {
    // set up map
    $map = $this->get ( 'ivory_google_map.map' );

    // Get User geo info
    $user = $this->getUser ();

    if (isset ( $user )) { // check to see if logged in: map is useless without it
        $map->setAutoZoom ( true );
        $map->setStylesheetOption('width', '500px');
        $map->setStylesheetOption('height', '500px');


        $radius = 1;

        // get repository for user class
        $coordList = $this->container->get ( 'sylius.repository.user' )->findUsersNearUser ( $user, $radius );

        // set user marker

        $this->placeMarker ( $user, "/assets/img/home.png", $map );

        if (! empty ( $coordList )) {
            foreach ( $coordList as $geo ) {
                $this->placeMarker ( $geo, "/assets/img/neighbor.png", $map );
            }
        }

        // get furthest distance
        $dist = $this->getFurthestDistance ( $user, $coordList );

        // set invisible boundary markers
        $this->addBoundaries ( $user, $dist, $map );

        // render the map
    } else {
        echo "You are not logged in. Please log in and try again.";
    }


        return $this->render ( 'KrewMediaLocalFarmBundle:Default:map.html.twig', array (
            'map' => $map 
    ) );

この問題を理解する上で、どんな助けもいただければ幸いです。

4

1 に答える 1

6

renderタグにはバンドルの完全な名前が必要なので、変更してください

{% render(controller( 'LocalFarmBundle:Map:basic')) %} 

{% render(controller( 'KrewMediaLocalFarmBundle:Map:basic')) %} 
于 2013-08-02T05:24:31.527 に答える