簡體   English   中英

Symfony2 - 我的請求出現 notFoundExceptionError

[英]Symfony2 - notFoundExceptionError with my request

首先,抱歉我的英語...所以我想請求按類別顯示我的文章。 但每次我都會遇到自己的錯誤。 所以我的控制器是:

 public function categorieAction($slug,$page)

{

     

    if ($page < 1) {

      throw new NotFoundHttpException('Page "'.$page.'" inexistante.');

    }

   

  $nbPerPage = 5;

   

  $listArticles = $this->getDoctrine()

    ->getManager()

    ->getRepository('OAHNewsBundle:Article')

    ->getAvecCategories($slug, $page, $nbPerPage) 

  ;

     

  $nbPages = ceil(count($listArticles)/$nbPerPage);

   

  if ($page > $nbPages) {

    throw $this->createNotFoundException("La page ".$page." n'existe pas.");

    }

   

   

    return $this->render('OAHNewsBundle:News:categorie.html.twig',array(

    'listArticles' => $listArticles,

    'nbPages'      => $nbPages,

    'page'         => $page

  ));

  }

我的存儲庫:

public function getAvecCategories ($page ,$slug, $nbPerPage )

   {

   $query = $this -> createQueryBuilder ('a')

       ->leftjoin ( 'a.categories' , 'c' )

       ->addselect('c')

       ->where('c.slug = :slug')

       ->setParameter('slug', $slug)

       ->leftjoin('a.image', 'i')

       ->addselect('i')

       ->orderBy('a.date', 'DESC')

       ->getQuery()

      ;

 

      $query

        ->setFirstResult(($page-1) * $nbPerPage)

        ->setMaxResults($nbPerPage)

    ;

         

    return new Paginator($query, true);

  

    }


    }

我的路線:

OAHNews_categorie:

    path:    /categorie/{slug}/{page}

    defaults: { _controller: OAHNewsBundle:News:categorie , page: 1 }

    requirements:

        page: \d*

我得到的錯誤是:

if ($page > $nbPages) {

    throw $this->createNotFoundException("La page ".$page." n'existe pas.");

    }

風景 :

    {% extends "OAHNewsBundle::OAH_layout.html.twig" %}


{% block title %} {{ parent() }} - Index{% endblock %}


{% block body_news %}


    {% for article in listArticles %}

    <div class="article_des_news">


        <div class="row">


         <div class="col-sm-3">

                <a href="{{path('OAHNews_voir', {'slugarticle':article.slugarticle})}}"><img src='{{ asset(article.image.webPath) }}' alt="{{ article.image.alt}}"/></a>

         </div>


         <div class="col-sm-9">

                <a class="titre_article" href="{{path('OAHNews_voir', {'slugarticle':article.slugarticle})}}">{{article.titre}}

                </a>

                    <p><i class="glyphicon glyphicon-pencil"></i> par {{article.auteur}},

                     <i class="glyphicon glyphicon-time"> </i> {{article.date|date('d/m/y')}}

                        {% if not article.categories.empty %} 

                        <i class="glyphicon glyphicon-tag"> </i>

                            {% for categorie in article.categories %}

                                {{ categorie.nom }}{% if not loop.last %}, {% endif %}

                            {% endfor %}

                        {% endif %}

                    </p>

                {{ article.contenu|truncate(100, false, "...")}}    

         </div>


        </div>

    </div>

    {% endfor %}



<ul class="pagination pull-right">

  {# On utilise la fonction range(a, b) qui crée un tableau de valeurs entre a et b #}

  {% for p in range(1, nbPages) %}

    <li{% if p == page %} class="active"{% endif %}>

      <a href="{{ path('OAHNews_accueil', {'page': p}) }}">{{ p }}</a>

    </li>

  {% endfor %}

</ul>


{% endblock %}

和我使用的鏈接:

<ul class="nav nav-pills nav-stacked">

  {% for categorie in listCategories %}

    <li class='menu'>

      <a class="titre_article normalLink" href="{{ path('OAHNews_categorie', {'slug': categorie.slug}) }}">

        {{ categorie.nom }}

      </a>

    </li>

  {% endfor %}

</ul>

那么我的請求有什么問題呢? 謝謝 !

好,我知道了 ! 您正在使用分頁器對象。 這個對象根本不給你結果。 如果你想得到articles的數量,你必須這樣做:

$listArticles->count()

根據班級的文檔

但是請注意,因為您的“現有頁面檢查”存在一些邏輯問題:您的存儲庫最多只能返回 5 個結果,因此如果您嘗試訪問第二個頁面,您將得到類似的結果:

$nbPages = ceil($listArticles->count()/$nbPerPage); // [0 - 5] / 5 = 0 or 1

  if ($page > $nbPages) { // if (2 > 0 or 1)
    throw $this->createNotFoundException("La page ".$page." n'existe pas.");
  }

如果您想檢查您是否正在訪問現有頁面,您可以執行以下操作:

if ($listArticles->count() > 0) {
    throw $this->createNotFoundException("La page ".$page." n'existe pas.");
}

在您的回報中,您必須通過執行以下操作將結果數組發送到您的模板:

 return $this->render('OAHNewsBundle:News:categorie.html.twig',array(

    'listArticles' => $listArticles->getIterator(),

    'nbPages'      => $nbPages,

    'page'         => $page

 ));

問題 2:由於您的 repo 的這一行,您的偏移量錯誤等於 -5:

->setFirstResult(($page-1) * $nbPerPage) // $page = 0 so (0-1) * 5 = -5

這是因為您像這樣定義了getAvecCategories

getAvecCategories ($page ,$slug, $nbPerPage ) // page, slug, nbPerPage

你通過反轉參數來調用它:

 ->getAvecCategories($slug, $page, $nbPerPage) // slug, page, nbPerPage

所以 php 嘗試在 int 中投一個 slug 並返回 0。

路線應該是

OAHNews_categorie:
    path:    /categorie/{slug}/{page}
    defaults: { _controller: OAHNewsBundle:News:categorie , page: 1 }
    requirements:
        page: \d+ <-- change \d* by \d+

嘗試在檢查之前強制轉換變量:

  if (intval($page) > $nbPages) {
    throw $this->createNotFoundException("La page ".$page." n'existe pas.");
  }

否則, dump($page)dump($nbPages)以了解您獲得的值並了解比較失敗的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM