php – 不完全确定(控制器)转发如何在Symfony中运行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 不完全确定(控制器)转发如何在Symfony中运行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3221字,纯文字阅读大概需要5分钟。
内容图文
我尝试使用as函数移动一些代码来为我的页面添加分页,到现在看起来像这样的某个控制器:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use AppBundle\Entity\Movie;
class PaginationController extends Controller
{
public function paginationAction(Request $request, $pageNumber)
{
$recordsPerPage = 5;
$page = $pageNumber;
// Positioning
$start = ($page > 1) ? ($page * $recordsPerPage) - $recordsPerPage : 0;
// Query
//Records:
//$movies = $this->getDoctrine()->getEntityManager()->getRepository('AppBundle:Movie')->FindAll();
$repository = $this->getDoctrine()->getRepository('AppBundle:Movie');
//Data to count:
$qb = $repository->createQueryBuilder('m');
$query = $qb
->getQuery();
$totalAmountRows = count($query->getResult());
//For display:
$query = $qb
->setFirstResult($start)
->setMaxResults($recordsPerPage)
->getQuery();
$movies = $query->getResult();
//Pagination:
$filterVariables = "";
//Always round up number (whole pages):
$totalPages = ceil($totalAmountRows / $recordsPerPage);
return array(
'movies' => $movies,
'filtervariables' => $filterVariables,
'totalPages' => $totalPages,
'totalAmountRows' => $totalAmountRows,
'pageNumber' => $pageNumber
);
}
}
应该接收值的控制器如下所示:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use AppBundle\Entity\Movie;
class MovieDisplayController extends Controller
{
public function showAction(Request $request, $pageNumber)
{
$this->forward('AppBundle:Pagination:pagination', array(
'pageNumber' => $pageNumber
));
return $this->render('movies/index.html.twig', array(
'movies' => $movies,
'filtervariables' => $filterVariables,
'page' => $page,
'totalPages' => $totalPages,
'totalAmountRows' => $totalAmountRows,
'pageNumber' => $pageNumber
));
}
}
但当我看到页面时,我看到:注意:未定义的变量:电影.我应该如何更改我的代码,以便它知道我试图将$movies变量从一个控制器变为另一个?
编辑:为了让我完全理解下面的答案,我想在我的问题中添加以下内容(感谢@Rvanlaak):
当我想在我的MovieRepository中处理分页时应该怎么样?
解决方法:
转发请求也会导致获得完全独立的响应.换句话说,showAction可以直接返回$this-> forward的返回响应对象.
你要做的不是前锋,你可以处理你的MovieRepository中的分页,甚至更好地使用像KnpPaginatorBundle这样的包,只需要你传递QueryBuilder,每页和活动页面的结果.
编辑附加问题:为了让您的存储库执行分页,您应该create a custom repository class并添加一个函数,该函数根据$resultsPerPage和$activePage输入参数返回预期结果:
// Oversimplified repo
class MovieRepository extends EntityRepository
{
public function findAllWithPagionation($resultsPerPage, $activePage)
{
$builder = $this->createQueryBuilder('m');
$totalRows = $builder->getQuery()->getSingleScalarResult();
return array(
'total' => $totalRows,
'results' => $builder
->setFirstResult($resultsPerPage * $activePage)
->setMaxResults($resultsPerPage)
->getQuery()
->getResult()
);
}
}
内容总结
以上是互联网集市为您收集整理的php – 不完全确定(控制器)转发如何在Symfony中运行全部内容,希望文章能够帮你解决php – 不完全确定(控制器)转发如何在Symfony中运行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。