Разбивка на страницы по месяцам Symfony / PaginatorPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Разбивка на страницы по месяцам Symfony / Paginator

Сообщение Anonymous »

Я использую paginator и fosJsRouting для создания формы с фильтрами.
Я пытаюсь создать фильтр, чтобы показывать только результаты в соответствии с выбранным месяцем. Итак, на домашней странице мы выбираем месяц, который расходуется в контроллере, затем я хотел бы передать его в запросе на лету.
Я не могу определить, что если переменная равна нулю, то выберите все.
Спасибо за помощь
Вот мой индекс контроллера:

public function indexAction( Request $request, $page, $limit, $month ) {
$em = $this->getDoctrine()->getManager();

if(isset($_GET['month']))
$month = $_GET['month'];
else
$month = "NULL";

$debits = $em->getRepository( 'BudgetBundle:Debit' )->getAmounts($this->getUser(), $month);

// Paramerage de la limite d'affichage par page
if(isset($_GET['limit'])) $limit = $_GET['limit'];
##################################################################################### START_DEBIT
if ( $page == '' ) // Evite l'affichage de la page numero 2 sur l'index
{
$page = 1;
}
$paginator = $this->get( 'knp_paginator' );
$pagination = $paginator->paginate(
$debits, /* query NOT result */
$request->query->getInt( 'page', $page )/*page number*/,
$limit/*limit per page*/
);

// Calcul du Total de dépense par page
$total = [];
foreach ( $pagination->getItems() as $item ) {
$total[] = $item->getAmount();
}
$totalAmount = [];
for ( $i = 0; $i < count( $debits->getQuery()->getResult() ); $i ++ ) {

$totalAmount[] = $debits->getQuery()->getResult()[ $i ]->getAmount();
}
##################################################################################### END_DEBIT

return $this->render( 'BudgetBundle:Views:index.html.twig', [
'pagination' => $pagination,
'total' => array_sum( $total ),
'montantTotal' => array_sum( $totalAmount )
] );
}

Построитель запросов:
public function getAmounts($user, $month){

$qb = $this->createQueryBuilder('d')
->leftJoin('d.company', 'company')
->addSelect('company')
->where('d.user = :user')
->setParameter('user', $user)
// ->andWhere( $month == NULL ? 'd.date = IS NOT NULL' : 'd.date = :month' )
// ->setParameter('month', $month)
->orderBy('d.date', 'DESC');

var_dump($month);
var_dump($qb->getQuery()->getDQL());
return $qb;
}

Мое мнение:
Choisissez le mois


{% if app.request.query.get("month") %}
{{ app.request.query.get("month") }}
{% endif %}
Janvier
Fevrier


Js:
$('#month').change(function () {
var url = Routing.generate('budget_homepage', {'month':$('#month').find(":selected").text()});
window.location.href = url;
});

И маршрут:
budget_homepage:
path: /{page}
defaults: { _controller: BudgetBundle:Budget:index, page: 1, limit: 5, month: null }
requirements:
page: \d*
limit: \d*
options:
expose: true


Подробнее здесь: https://stackoverflow.com/questions/436 ... -paginator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»