From c8016573efa49c24a448dfab7f00e49bb9591c15 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 31 Jul 2020 17:16:01 +0200 Subject: [PATCH 01/24] wip --- composer.json | 7 +++-- .../Repository/BookRepository.php | 8 +++++ src/BasicEntities/Service/BookService.php | 25 ++++++++++++--- .../ViewModel/BooksViewModel.php | 31 +++++++++++++++++++ 4 files changed, 63 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 41f0288..14c884d 100644 --- a/composer.json +++ b/composer.json @@ -25,9 +25,10 @@ "gedmo/doctrine-extensions": "^2.4", "hubspot/hubspot-php": "^2.0", "knplabs/doctrine-behaviors": "^2.0.6", - "runroom-packages/form-handler-bundle": "^0.8.1", - "runroom-packages/render-event-bundle": "^0.8.1", - "runroom-packages/sortable-behavior-bundle": "^0.8.1", + "knplabs/knp-paginator-bundle": "^5.3", + "runroom-packages/form-handler-bundle": "^0.8", + "runroom-packages/render-event-bundle": "^0.8", + "runroom-packages/sortable-behavior-bundle": "^0.8", "sonata-project/admin-bundle": "^3.68", "sonata-project/doctrine-extensions": "^1.9", "sonata-project/doctrine-orm-admin-bundle": "^3.20", diff --git a/src/BasicEntities/Repository/BookRepository.php b/src/BasicEntities/Repository/BookRepository.php index ba3c14c..ac5527e 100644 --- a/src/BasicEntities/Repository/BookRepository.php +++ b/src/BasicEntities/Repository/BookRepository.php @@ -47,4 +47,12 @@ public function findBySlug(string $slug): Book return $query->getSingleResult(); } + + public function getBooksQueryBuilder() + { + return $this->createQueryBuilder('book') + ->where('book.publish = true') + ->leftJoin('book.translations', 'translations', Join::WITH, 'translations.locale = :locale') + ->setParameter('locale', $request->getLocale()); + } } diff --git a/src/BasicEntities/Service/BookService.php b/src/BasicEntities/Service/BookService.php index 3e4ecf5..e3a6a8b 100644 --- a/src/BasicEntities/Service/BookService.php +++ b/src/BasicEntities/Service/BookService.php @@ -13,26 +13,41 @@ namespace Runroom\SamplesBundle\BasicEntities\Service; +use Knp\Component\Pager\PaginatorInterface; use Runroom\SamplesBundle\BasicEntities\Repository\BookRepository; use Runroom\SamplesBundle\BasicEntities\ViewModel\BooksViewModel; use Runroom\SamplesBundle\BasicEntities\ViewModel\BookViewModel; class BookService { + /** @var int */ + private const MAX_RESULT = 10; + /** @var BookRepository */ private $repository; - public function __construct(BookRepository $repository) - { + /** @var PaginatorInterface */ + private $paginator; + + public function __construct( + BookRepository $repository, + PaginatorInterface $paginator + ) { $this->repository = $repository; + $this->paginator = $paginator; } - public function getBooksViewModel(): BooksViewModel + public function getBooksViewModel(int $page): BooksViewModel { - $books = $this->repository->findBy(['publish' => true], ['position' => 'ASC']); + // $books = $this->repository->findBy(['publish' => true], ['position' => 'ASC']); + + $queryBuilder = $this->repository->getArticlesQueryBuilder(); + + $pagination = $this->paginator->paginate($queryBuilder, $page, self::MAX_RESULT); $model = new BooksViewModel(); - $model->setBooks($books); + $model->setPagination($pagination); + // $model->setBooks($books); return $model; } diff --git a/src/BasicEntities/ViewModel/BooksViewModel.php b/src/BasicEntities/ViewModel/BooksViewModel.php index cd333d7..cbb9809 100644 --- a/src/BasicEntities/ViewModel/BooksViewModel.php +++ b/src/BasicEntities/ViewModel/BooksViewModel.php @@ -13,10 +13,13 @@ namespace Runroom\SamplesBundle\BasicEntities\ViewModel; +use Knp\Component\Pager\Pagination\PaginationInterface; use Runroom\SamplesBundle\BasicEntities\Entity\Book; class BooksViewModel { + protected $pagination; + protected $paginationData; /** @var Book[] */ private $books; @@ -31,4 +34,32 @@ public function getBooks(): ?array { return $this->books; } + + public function getPagination(): ?PaginationInterface + { + return $this->pagination; + } + + public function setPagination(PaginationInterface $pagination): self + { + $this->pagination = $pagination; + $this->paginationData = $pagination->getPaginationData(); + + return $this; + } + + public function getPaginationData(string $data): ?int + { + return $this->paginationData[$data] ?? null; + } + + public function getNextPage(): ?int + { + return $this->getPaginationData('next'); + } + + public function getPreviousPage(): ?int + { + return $this->getPaginationData('previous'); + } } From 30e2cef30ffd56043061302ac0160fdc35b8fbcf Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 4 Aug 2020 01:01:26 +0200 Subject: [PATCH 02/24] wip fix phpunit errors --- src/BasicEntities/Controller/BookController.php | 4 ++-- src/BasicEntities/Service/BookService.php | 2 +- tests/App/Kernel.php | 2 ++ tests/BasicEntities/Unit/BookControllerTest.php | 4 ++-- tests/BasicEntities/Unit/BookServiceTest.php | 5 +++-- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/BasicEntities/Controller/BookController.php b/src/BasicEntities/Controller/BookController.php index 299da14..05072b8 100644 --- a/src/BasicEntities/Controller/BookController.php +++ b/src/BasicEntities/Controller/BookController.php @@ -33,9 +33,9 @@ public function __construct( $this->service = $service; } - public function books(): Response + public function books(int $page): Response { - $model = $this->service->getBooksViewModel(); + $model = $this->service->getBooksViewModel($page); return $this->renderer->renderResponse( '@RunroomSamples/BasicEntities/books.html.twig', diff --git a/src/BasicEntities/Service/BookService.php b/src/BasicEntities/Service/BookService.php index e3a6a8b..e1f11aa 100644 --- a/src/BasicEntities/Service/BookService.php +++ b/src/BasicEntities/Service/BookService.php @@ -41,7 +41,7 @@ public function getBooksViewModel(int $page): BooksViewModel { // $books = $this->repository->findBy(['publish' => true], ['position' => 'ASC']); - $queryBuilder = $this->repository->getArticlesQueryBuilder(); + $queryBuilder = $this->repository->getBooksQueryBuilder(); $pagination = $this->paginator->paginate($queryBuilder, $page, self::MAX_RESULT); diff --git a/tests/App/Kernel.php b/tests/App/Kernel.php index d9b82fd..888a123 100644 --- a/tests/App/Kernel.php +++ b/tests/App/Kernel.php @@ -36,6 +36,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel as BaseKernel; use Symfony\Component\Routing\RouteCollectionBuilder; +use Knp\Bundle\PaginatorBundle\KnpPaginatorBundle; final class Kernel extends BaseKernel { @@ -51,6 +52,7 @@ public function registerBundles(): iterable new FOSCKEditorBundle(), new FrameworkBundle(), new KnpMenuBundle(), + new KnpPaginatorBundle(), new SecurityBundle(), new TwigBundle(), new SonataMediaBundle(), diff --git a/tests/BasicEntities/Unit/BookControllerTest.php b/tests/BasicEntities/Unit/BookControllerTest.php index 08a2e2e..6b51279 100644 --- a/tests/BasicEntities/Unit/BookControllerTest.php +++ b/tests/BasicEntities/Unit/BookControllerTest.php @@ -56,12 +56,12 @@ public function itRenderBooks(): void $expectedResponse = new Response(); $model = new BooksViewModel(); - $this->service->getBooksViewModel()->willReturn($model); + $this->service->getBooksViewModel(1)->willReturn($model); $this->renderer->renderResponse(self::BOOKS_VIEW, $model, null) ->willReturn($expectedResponse); - $response = $this->controller->books(); + $response = $this->controller->books(1); self::assertSame($expectedResponse, $response); } diff --git a/tests/BasicEntities/Unit/BookServiceTest.php b/tests/BasicEntities/Unit/BookServiceTest.php index 679e62e..1cb3f50 100644 --- a/tests/BasicEntities/Unit/BookServiceTest.php +++ b/tests/BasicEntities/Unit/BookServiceTest.php @@ -13,6 +13,7 @@ namespace Runroom\SamplesBundle\Tests\BasicEntities\Unit; +use Knp\Component\Pager\Paginator; use PHPUnit\Framework\TestCase; use Prophecy\PhpUnit\ProphecyTrait; use Prophecy\Prophecy\ObjectProphecy; @@ -34,7 +35,7 @@ protected function setUp(): void { $this->repository = $this->prophesize(BookRepository::class); - $this->service = new BookService($this->repository->reveal()); + $this->service = new BookService($this->repository->reveal(), new Paginator()); } /** @test */ @@ -44,7 +45,7 @@ public function itBuildsBooksViewModel(): void $this->repository->findBy(['publish' => true], ['position' => 'ASC'])->willReturn($expectedBooks); - $model = $this->service->getBooksViewModel(); + $model = $this->service->getBooksViewModel(1); self::assertSame($model->getBooks(), $expectedBooks); } From 960c0382d45d5d4b02323a69d65858bd7275d48b Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 4 Aug 2020 01:16:39 +0200 Subject: [PATCH 03/24] exec php-cs-fixer --- tests/App/Kernel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/App/Kernel.php b/tests/App/Kernel.php index 888a123..331ab1f 100644 --- a/tests/App/Kernel.php +++ b/tests/App/Kernel.php @@ -18,6 +18,7 @@ use Doctrine\Bundle\DoctrineBundle\DoctrineBundle; use FOS\CKEditorBundle\FOSCKEditorBundle; use Knp\Bundle\MenuBundle\KnpMenuBundle; +use Knp\Bundle\PaginatorBundle\KnpPaginatorBundle; use Knp\DoctrineBehaviors\DoctrineBehaviorsBundle; use Runroom\FormHandlerBundle\RunroomFormHandlerBundle; use Runroom\RenderEventBundle\RunroomRenderEventBundle; @@ -36,7 +37,6 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel as BaseKernel; use Symfony\Component\Routing\RouteCollectionBuilder; -use Knp\Bundle\PaginatorBundle\KnpPaginatorBundle; final class Kernel extends BaseKernel { From 366bf6827b3c64667de6f196fa2e24ea6de54534 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 6 Aug 2020 10:25:45 +0200 Subject: [PATCH 04/24] reset classes and tests --- .../Controller/BookController.php | 4 +-- .../ViewModel/BooksListViewModel.php | 11 +++++++ .../ViewModel/BooksViewModel.php | 33 +------------------ .../BasicEntities/Unit/BookControllerTest.php | 6 ++-- tests/BasicEntities/Unit/BookServiceTest.php | 7 ++-- 5 files changed, 20 insertions(+), 41 deletions(-) create mode 100644 src/BasicEntities/ViewModel/BooksListViewModel.php diff --git a/src/BasicEntities/Controller/BookController.php b/src/BasicEntities/Controller/BookController.php index 05072b8..299da14 100644 --- a/src/BasicEntities/Controller/BookController.php +++ b/src/BasicEntities/Controller/BookController.php @@ -33,9 +33,9 @@ public function __construct( $this->service = $service; } - public function books(int $page): Response + public function books(): Response { - $model = $this->service->getBooksViewModel($page); + $model = $this->service->getBooksViewModel(); return $this->renderer->renderResponse( '@RunroomSamples/BasicEntities/books.html.twig', diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php new file mode 100644 index 0000000..ed73d08 --- /dev/null +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -0,0 +1,11 @@ +books; } - - public function getPagination(): ?PaginationInterface - { - return $this->pagination; - } - - public function setPagination(PaginationInterface $pagination): self - { - $this->pagination = $pagination; - $this->paginationData = $pagination->getPaginationData(); - - return $this; - } - - public function getPaginationData(string $data): ?int - { - return $this->paginationData[$data] ?? null; - } - - public function getNextPage(): ?int - { - return $this->getPaginationData('next'); - } - - public function getPreviousPage(): ?int - { - return $this->getPaginationData('previous'); - } -} +} \ No newline at end of file diff --git a/tests/BasicEntities/Unit/BookControllerTest.php b/tests/BasicEntities/Unit/BookControllerTest.php index 6b51279..312cacd 100644 --- a/tests/BasicEntities/Unit/BookControllerTest.php +++ b/tests/BasicEntities/Unit/BookControllerTest.php @@ -56,12 +56,12 @@ public function itRenderBooks(): void $expectedResponse = new Response(); $model = new BooksViewModel(); - $this->service->getBooksViewModel(1)->willReturn($model); + $this->service->getBooksViewModel()->willReturn($model); $this->renderer->renderResponse(self::BOOKS_VIEW, $model, null) ->willReturn($expectedResponse); - $response = $this->controller->books(1); + $response = $this->controller->books(); self::assertSame($expectedResponse, $response); } @@ -80,4 +80,4 @@ public function itRenderBook(): void self::assertSame($expectedResponse, $response); } -} +} \ No newline at end of file diff --git a/tests/BasicEntities/Unit/BookServiceTest.php b/tests/BasicEntities/Unit/BookServiceTest.php index 1cb3f50..af5dcd4 100644 --- a/tests/BasicEntities/Unit/BookServiceTest.php +++ b/tests/BasicEntities/Unit/BookServiceTest.php @@ -13,7 +13,6 @@ namespace Runroom\SamplesBundle\Tests\BasicEntities\Unit; -use Knp\Component\Pager\Paginator; use PHPUnit\Framework\TestCase; use Prophecy\PhpUnit\ProphecyTrait; use Prophecy\Prophecy\ObjectProphecy; @@ -35,7 +34,7 @@ protected function setUp(): void { $this->repository = $this->prophesize(BookRepository::class); - $this->service = new BookService($this->repository->reveal(), new Paginator()); + $this->service = new BookService($this->repository->reveal()); } /** @test */ @@ -45,7 +44,7 @@ public function itBuildsBooksViewModel(): void $this->repository->findBy(['publish' => true], ['position' => 'ASC'])->willReturn($expectedBooks); - $model = $this->service->getBooksViewModel(1); + $model = $this->service->getBooksViewModel(); self::assertSame($model->getBooks(), $expectedBooks); } @@ -61,4 +60,4 @@ public function itBuildsBookViewModel(): void self::assertSame($model->getBook(), $expectedBook); } -} +} \ No newline at end of file From c5cb10c62ccad2b93691ad4344d80c5d74d46aa4 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 6 Aug 2020 10:45:14 +0200 Subject: [PATCH 05/24] created BookListViewModel --- .../Controller/BookController.php | 9 ++++++ .../Repository/BookRepository.php | 2 ++ src/BasicEntities/Service/BookService.php | 24 ++++++++++------ .../ViewModel/BooksListViewModel.php | 28 +++++++++++++++++++ .../views/BasicEntities/book-list.html.twig | 7 +++++ tests/BasicEntities/Unit/BookServiceTest.php | 9 +++++- 6 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 src/Resources/views/BasicEntities/book-list.html.twig diff --git a/src/BasicEntities/Controller/BookController.php b/src/BasicEntities/Controller/BookController.php index 299da14..474ce76 100644 --- a/src/BasicEntities/Controller/BookController.php +++ b/src/BasicEntities/Controller/BookController.php @@ -52,4 +52,13 @@ public function book(string $slug): Response $model ); } + + public function list(int $page): Response + { + $model = $this->service->getBooksListViewModel($page); + + return $this->renderer->renderResponse( + '' + ) + } } diff --git a/src/BasicEntities/Repository/BookRepository.php b/src/BasicEntities/Repository/BookRepository.php index ac5527e..6a000a5 100644 --- a/src/BasicEntities/Repository/BookRepository.php +++ b/src/BasicEntities/Repository/BookRepository.php @@ -50,6 +50,8 @@ public function findBySlug(string $slug): Book public function getBooksQueryBuilder() { + $request = $this->requestStack->getCurrentRequest() ?? new Request(); + return $this->createQueryBuilder('book') ->where('book.publish = true') ->leftJoin('book.translations', 'translations', Join::WITH, 'translations.locale = :locale') diff --git a/src/BasicEntities/Service/BookService.php b/src/BasicEntities/Service/BookService.php index e1f11aa..cb84a9d 100644 --- a/src/BasicEntities/Service/BookService.php +++ b/src/BasicEntities/Service/BookService.php @@ -17,6 +17,7 @@ use Runroom\SamplesBundle\BasicEntities\Repository\BookRepository; use Runroom\SamplesBundle\BasicEntities\ViewModel\BooksViewModel; use Runroom\SamplesBundle\BasicEntities\ViewModel\BookViewModel; +use Runroom\SamplesBundle\BasicEntities\ViewModel\BooksListViewModel; class BookService { @@ -37,17 +38,12 @@ public function __construct( $this->paginator = $paginator; } - public function getBooksViewModel(int $page): BooksViewModel + public function getBooksViewModel(): BooksViewModel { - // $books = $this->repository->findBy(['publish' => true], ['position' => 'ASC']); - - $queryBuilder = $this->repository->getBooksQueryBuilder(); - - $pagination = $this->paginator->paginate($queryBuilder, $page, self::MAX_RESULT); + $books = $this->repository->findBy(['publish' => true], ['position' => 'ASC']); $model = new BooksViewModel(); - $model->setPagination($pagination); - // $model->setBooks($books); + $model->setBooks($books); return $model; } @@ -61,4 +57,16 @@ public function getBookViewModel(string $slug): BookViewModel return $model; } + + public function getBooksListViewModel(int $page): BooksListViewModel + { + $queryBuilder = $this->repository->getBooksQueryBuilder(); + + $pagination = $this->paginator->paginate($queryBuilder, $page, self::MAX_RESULT); + + $model = new BooksListViewModel(); + $model->setPagination($pagination); + + return $model; + } } diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index ed73d08..3f35aeb 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -8,4 +8,32 @@ class BooksListViewModel { protected $pagination; protected $paginationData; + + public function getPagination(): ?PaginationInterface + { + return $this->pagination; + } + + public function setPagination(PaginationInterface $pagination): self + { + $this->pagination = $pagination; + $this->paginationData = $pagination->getPaginationData(); + + return $this; + } + + public function getPreviousPage(): ?int + { + return $this->getPaginationData('previous'); + } + + public function getNextPage(): ?int + { + return $this->getPaginationData('next'); + } + + public function getPaginationData(string $data): ?int + { + return $this->paginationData[$data] ?? null; + } } \ No newline at end of file diff --git a/src/Resources/views/BasicEntities/book-list.html.twig b/src/Resources/views/BasicEntities/book-list.html.twig new file mode 100644 index 0000000..315719f --- /dev/null +++ b/src/Resources/views/BasicEntities/book-list.html.twig @@ -0,0 +1,7 @@ +{% extends '@RunroomSamples/base.html.twig' %} + +{% block content %} + {% for book in model.pagination.items %} +

{{ book.title }}

+ {% endfor %} +{% endblock content %} \ No newline at end of file diff --git a/tests/BasicEntities/Unit/BookServiceTest.php b/tests/BasicEntities/Unit/BookServiceTest.php index af5dcd4..9e6ccc9 100644 --- a/tests/BasicEntities/Unit/BookServiceTest.php +++ b/tests/BasicEntities/Unit/BookServiceTest.php @@ -19,6 +19,7 @@ use Runroom\SamplesBundle\BasicEntities\Repository\BookRepository; use Runroom\SamplesBundle\BasicEntities\Service\BookService; use Runroom\SamplesBundle\Tests\BasicEntities\Fixtures\BookFixture; +use Knp\Component\Pager\PaginatorInterface; class BookServiceTest extends TestCase { @@ -30,11 +31,17 @@ class BookServiceTest extends TestCase /** @var BookService */ private $service; + private $paginator; + protected function setUp(): void { $this->repository = $this->prophesize(BookRepository::class); + $this->paginator = $this->prophesize(PaginatorInterface::class); - $this->service = new BookService($this->repository->reveal()); + $this->service = new BookService( + $this->repository->reveal(), + $this->paginator->reveal() + ); } /** @test */ From eaebc178430dc6ec868a3376aab63183f79c2464 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 6 Aug 2020 10:49:28 +0200 Subject: [PATCH 06/24] fix BookControler list function return --- src/BasicEntities/Controller/BookController.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/BasicEntities/Controller/BookController.php b/src/BasicEntities/Controller/BookController.php index 474ce76..d93aee7 100644 --- a/src/BasicEntities/Controller/BookController.php +++ b/src/BasicEntities/Controller/BookController.php @@ -58,7 +58,8 @@ public function list(int $page): Response $model = $this->service->getBooksListViewModel($page); return $this->renderer->renderResponse( - '' - ) + '@RunroomSamples/BasicEntities/book-list.html.twig', + $model + ); } } From d6496406f5dc74cbe7e8eb371ebe2424ab8d3a89 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 6 Aug 2020 11:12:16 +0200 Subject: [PATCH 07/24] php-cs-fixer --- src/BasicEntities/Repository/BookRepository.php | 2 +- src/BasicEntities/Service/BookService.php | 2 +- .../ViewModel/BooksListViewModel.php | 15 +++++++++++++-- src/BasicEntities/ViewModel/BooksViewModel.php | 2 +- tests/BasicEntities/Unit/BookControllerTest.php | 2 +- tests/BasicEntities/Unit/BookServiceTest.php | 4 ++-- 6 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/BasicEntities/Repository/BookRepository.php b/src/BasicEntities/Repository/BookRepository.php index 6a000a5..1388239 100644 --- a/src/BasicEntities/Repository/BookRepository.php +++ b/src/BasicEntities/Repository/BookRepository.php @@ -51,7 +51,7 @@ public function findBySlug(string $slug): Book public function getBooksQueryBuilder() { $request = $this->requestStack->getCurrentRequest() ?? new Request(); - + return $this->createQueryBuilder('book') ->where('book.publish = true') ->leftJoin('book.translations', 'translations', Join::WITH, 'translations.locale = :locale') diff --git a/src/BasicEntities/Service/BookService.php b/src/BasicEntities/Service/BookService.php index cb84a9d..0e08493 100644 --- a/src/BasicEntities/Service/BookService.php +++ b/src/BasicEntities/Service/BookService.php @@ -15,9 +15,9 @@ use Knp\Component\Pager\PaginatorInterface; use Runroom\SamplesBundle\BasicEntities\Repository\BookRepository; +use Runroom\SamplesBundle\BasicEntities\ViewModel\BooksListViewModel; use Runroom\SamplesBundle\BasicEntities\ViewModel\BooksViewModel; use Runroom\SamplesBundle\BasicEntities\ViewModel\BookViewModel; -use Runroom\SamplesBundle\BasicEntities\ViewModel\BooksListViewModel; class BookService { diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index 3f35aeb..27845a5 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -1,10 +1,21 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Runroom\SamplesBundle\BasicEntities\ViewModel; use Knp\Component\Pager\Pagination\PaginationInterface; -class BooksListViewModel +class BooksListViewModel { protected $pagination; protected $paginationData; @@ -36,4 +47,4 @@ public function getPaginationData(string $data): ?int { return $this->paginationData[$data] ?? null; } -} \ No newline at end of file +} diff --git a/src/BasicEntities/ViewModel/BooksViewModel.php b/src/BasicEntities/ViewModel/BooksViewModel.php index 0f3dd02..cd333d7 100644 --- a/src/BasicEntities/ViewModel/BooksViewModel.php +++ b/src/BasicEntities/ViewModel/BooksViewModel.php @@ -31,4 +31,4 @@ public function getBooks(): ?array { return $this->books; } -} \ No newline at end of file +} diff --git a/tests/BasicEntities/Unit/BookControllerTest.php b/tests/BasicEntities/Unit/BookControllerTest.php index 312cacd..08a2e2e 100644 --- a/tests/BasicEntities/Unit/BookControllerTest.php +++ b/tests/BasicEntities/Unit/BookControllerTest.php @@ -80,4 +80,4 @@ public function itRenderBook(): void self::assertSame($expectedResponse, $response); } -} \ No newline at end of file +} diff --git a/tests/BasicEntities/Unit/BookServiceTest.php b/tests/BasicEntities/Unit/BookServiceTest.php index 9e6ccc9..d9b3b8d 100644 --- a/tests/BasicEntities/Unit/BookServiceTest.php +++ b/tests/BasicEntities/Unit/BookServiceTest.php @@ -13,13 +13,13 @@ namespace Runroom\SamplesBundle\Tests\BasicEntities\Unit; +use Knp\Component\Pager\PaginatorInterface; use PHPUnit\Framework\TestCase; use Prophecy\PhpUnit\ProphecyTrait; use Prophecy\Prophecy\ObjectProphecy; use Runroom\SamplesBundle\BasicEntities\Repository\BookRepository; use Runroom\SamplesBundle\BasicEntities\Service\BookService; use Runroom\SamplesBundle\Tests\BasicEntities\Fixtures\BookFixture; -use Knp\Component\Pager\PaginatorInterface; class BookServiceTest extends TestCase { @@ -67,4 +67,4 @@ public function itBuildsBookViewModel(): void self::assertSame($model->getBook(), $expectedBook); } -} \ No newline at end of file +} From 75ab0477a19fb986ee74445f90c707a07f8849bb Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 6 Aug 2020 11:14:16 +0200 Subject: [PATCH 08/24] type variable --- tests/BasicEntities/Unit/BookServiceTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/BasicEntities/Unit/BookServiceTest.php b/tests/BasicEntities/Unit/BookServiceTest.php index d9b3b8d..965efc8 100644 --- a/tests/BasicEntities/Unit/BookServiceTest.php +++ b/tests/BasicEntities/Unit/BookServiceTest.php @@ -31,6 +31,7 @@ class BookServiceTest extends TestCase /** @var BookService */ private $service; + /** @var PaginatorInterface */ private $paginator; protected function setUp(): void From ead0c9e0de080fb1a9934bb50b5b3e86bb194126 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 6 Aug 2020 13:25:59 +0200 Subject: [PATCH 09/24] BookListViewModel type hinting --- src/BasicEntities/Repository/BookRepository.php | 3 ++- src/BasicEntities/ViewModel/BooksListViewModel.php | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/BasicEntities/Repository/BookRepository.php b/src/BasicEntities/Repository/BookRepository.php index 1388239..83d6482 100644 --- a/src/BasicEntities/Repository/BookRepository.php +++ b/src/BasicEntities/Repository/BookRepository.php @@ -14,6 +14,7 @@ namespace Runroom\SamplesBundle\BasicEntities\Repository; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\Query\Expr\Join; use Doctrine\Persistence\ManagerRegistry; use Runroom\SamplesBundle\BasicEntities\Entity\Book; @@ -48,7 +49,7 @@ public function findBySlug(string $slug): Book return $query->getSingleResult(); } - public function getBooksQueryBuilder() + public function getBooksQueryBuilder(): QueryBuilder { $request = $this->requestStack->getCurrentRequest() ?? new Request(); diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index 27845a5..e32a278 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -17,14 +17,19 @@ class BooksListViewModel { + /** @var PaginationInterface */ protected $pagination; + + /** @var array */ protected $paginationData; + /** @return PaginationInterface|null */ public function getPagination(): ?PaginationInterface { return $this->pagination; } + /** @return BookListViewModel */ public function setPagination(PaginationInterface $pagination): self { $this->pagination = $pagination; @@ -33,16 +38,19 @@ public function setPagination(PaginationInterface $pagination): self return $this; } + /** @return int|null */ public function getPreviousPage(): ?int { return $this->getPaginationData('previous'); } + /** @return int|null */ public function getNextPage(): ?int { return $this->getPaginationData('next'); } + /** return int|null */ public function getPaginationData(string $data): ?int { return $this->paginationData[$data] ?? null; From d835726595338459df43d78700f01083b283c563 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 08:55:09 +0200 Subject: [PATCH 10/24] phpstan typing --- src/BasicEntities/ViewModel/BooksListViewModel.php | 14 +++++++------- tests/BasicEntities/Unit/BookServiceTest.php | 5 +++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index e32a278..0c24904 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -14,22 +14,25 @@ namespace Runroom\SamplesBundle\BasicEntities\ViewModel; use Knp\Component\Pager\Pagination\PaginationInterface; +use Runroom\SamplesBundle\BasicEntities\Entity\Book; class BooksListViewModel { - /** @var PaginationInterface */ + /** @var PaginationInterface */ protected $pagination; - /** @var array */ + /** @var array */ protected $paginationData; - /** @return PaginationInterface|null */ + /** @return PaginationInterface|null */ public function getPagination(): ?PaginationInterface { return $this->pagination; } - /** @return BookListViewModel */ + /** + * @param PaginationInterface $pagination + * @return self */ public function setPagination(PaginationInterface $pagination): self { $this->pagination = $pagination; @@ -38,19 +41,16 @@ public function setPagination(PaginationInterface $pagination): self return $this; } - /** @return int|null */ public function getPreviousPage(): ?int { return $this->getPaginationData('previous'); } - /** @return int|null */ public function getNextPage(): ?int { return $this->getPaginationData('next'); } - /** return int|null */ public function getPaginationData(string $data): ?int { return $this->paginationData[$data] ?? null; diff --git a/tests/BasicEntities/Unit/BookServiceTest.php b/tests/BasicEntities/Unit/BookServiceTest.php index 965efc8..1749406 100644 --- a/tests/BasicEntities/Unit/BookServiceTest.php +++ b/tests/BasicEntities/Unit/BookServiceTest.php @@ -13,6 +13,7 @@ namespace Runroom\SamplesBundle\Tests\BasicEntities\Unit; +use Knp\Component\Pager\Paginator; use Knp\Component\Pager\PaginatorInterface; use PHPUnit\Framework\TestCase; use Prophecy\PhpUnit\ProphecyTrait; @@ -37,11 +38,11 @@ class BookServiceTest extends TestCase protected function setUp(): void { $this->repository = $this->prophesize(BookRepository::class); - $this->paginator = $this->prophesize(PaginatorInterface::class); + $this->paginator = $this->createMock(PaginatorInterface::class); $this->service = new BookService( $this->repository->reveal(), - $this->paginator->reveal() + $this->paginator ); } From c99f2fbfdfc51d22492aff158c06a4d02f0c33b6 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 09:01:09 +0200 Subject: [PATCH 11/24] php-cs-fixer --- src/BasicEntities/Repository/BookRepository.php | 2 +- src/BasicEntities/ViewModel/BooksListViewModel.php | 1 + tests/BasicEntities/Unit/BookServiceTest.php | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BasicEntities/Repository/BookRepository.php b/src/BasicEntities/Repository/BookRepository.php index 83d6482..4152fc0 100644 --- a/src/BasicEntities/Repository/BookRepository.php +++ b/src/BasicEntities/Repository/BookRepository.php @@ -14,8 +14,8 @@ namespace Runroom\SamplesBundle\BasicEntities\Repository; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\Query\Expr\Join; +use Doctrine\ORM\QueryBuilder; use Doctrine\Persistence\ManagerRegistry; use Runroom\SamplesBundle\BasicEntities\Entity\Book; use Symfony\Component\HttpFoundation\Request; diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index 0c24904..9aaf90f 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -32,6 +32,7 @@ public function getPagination(): ?PaginationInterface /** * @param PaginationInterface $pagination + * * @return self */ public function setPagination(PaginationInterface $pagination): self { diff --git a/tests/BasicEntities/Unit/BookServiceTest.php b/tests/BasicEntities/Unit/BookServiceTest.php index 1749406..c63c21c 100644 --- a/tests/BasicEntities/Unit/BookServiceTest.php +++ b/tests/BasicEntities/Unit/BookServiceTest.php @@ -13,7 +13,6 @@ namespace Runroom\SamplesBundle\Tests\BasicEntities\Unit; -use Knp\Component\Pager\Paginator; use Knp\Component\Pager\PaginatorInterface; use PHPUnit\Framework\TestCase; use Prophecy\PhpUnit\ProphecyTrait; From 82a7ff9480db6a992e305f91b0ef788c9027030e Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 09:47:00 +0200 Subject: [PATCH 12/24] phpstand and php-cs-fixer --- src/BasicEntities/ViewModel/BooksListViewModel.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index 9aaf90f..1fda1a2 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -13,12 +13,13 @@ namespace Runroom\SamplesBundle\BasicEntities\ViewModel; +use Knp\Bundle\PaginatorBundle\Pagination\SlidingPaginationInterface; use Knp\Component\Pager\Pagination\PaginationInterface; use Runroom\SamplesBundle\BasicEntities\Entity\Book; class BooksListViewModel { - /** @var PaginationInterface */ + /** @var SlidingPaginationInterface */ protected $pagination; /** @var array */ @@ -31,10 +32,8 @@ public function getPagination(): ?PaginationInterface } /** - * @param PaginationInterface $pagination - * - * @return self */ - public function setPagination(PaginationInterface $pagination): self + * @param SlidingPaginationInterface $pagination */ + public function setPagination(SlidingPaginationInterface &$pagination): self { $this->pagination = $pagination; $this->paginationData = $pagination->getPaginationData(); From 133dc4565bc927317411299897a972aaf6e10593 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 09:56:56 +0200 Subject: [PATCH 13/24] getPagination typehint --- src/BasicEntities/ViewModel/BooksListViewModel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index 1fda1a2..a6a3a6d 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -25,8 +25,8 @@ class BooksListViewModel /** @var array */ protected $paginationData; - /** @return PaginationInterface|null */ - public function getPagination(): ?PaginationInterface + /** @return SlidingPaginationInterface|null */ + public function getPagination(): ?SlidingPaginationInterface { return $this->pagination; } From d1a915f2c37fe90568e1c59046166a1fc8e368d4 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 09:57:58 +0200 Subject: [PATCH 14/24] getPagination typehint --- src/BasicEntities/ViewModel/BooksListViewModel.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index a6a3a6d..1fbe94f 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -14,7 +14,6 @@ namespace Runroom\SamplesBundle\BasicEntities\ViewModel; use Knp\Bundle\PaginatorBundle\Pagination\SlidingPaginationInterface; -use Knp\Component\Pager\Pagination\PaginationInterface; use Runroom\SamplesBundle\BasicEntities\Entity\Book; class BooksListViewModel From 8390e6944bd13db1d7976c432fee745c147c9195 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 11:44:23 +0200 Subject: [PATCH 15/24] test --- src/Resources/config/services.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index fb78c1e..a6205bd 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -24,6 +24,12 @@ services: arguments: [null, Runroom\SamplesBundle\BasicEntities\Entity\Category, null] tags: - { name: sonata.admin, manager_type: orm, label: 'Categories' } + + Runroom\SamplesBundle\BasicEntities\Service\BookService: + public: true + arguments: [Runroom\SamplesBundle\BasicEntities\Repository\BookRepository, Knp\Component\Pager\PaginatorInterface] + tags: + - { name: sonata.admin, magaer_type: orm, label: 'Books' } # Forms Runroom\SamplesBundle\Forms\Controller\: From c928c134b5309afb64d0a8fc846a80302d5ec99d Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 11:46:09 +0200 Subject: [PATCH 16/24] fixed typo --- src/Resources/config/services.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index a6205bd..af22649 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -29,7 +29,7 @@ services: public: true arguments: [Runroom\SamplesBundle\BasicEntities\Repository\BookRepository, Knp\Component\Pager\PaginatorInterface] tags: - - { name: sonata.admin, magaer_type: orm, label: 'Books' } + - { name: sonata.admin, manager_type: orm, label: 'Books' } # Forms Runroom\SamplesBundle\Forms\Controller\: From 571bca44859b0c075a2e6a231047d56a74a073ef Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 11:57:33 +0200 Subject: [PATCH 17/24] test --- src/Resources/config/services.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index af22649..f76717f 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -28,8 +28,6 @@ services: Runroom\SamplesBundle\BasicEntities\Service\BookService: public: true arguments: [Runroom\SamplesBundle\BasicEntities\Repository\BookRepository, Knp\Component\Pager\PaginatorInterface] - tags: - - { name: sonata.admin, manager_type: orm, label: 'Books' } # Forms Runroom\SamplesBundle\Forms\Controller\: From f0454906f24347008bc5f41385a12c854581286d Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 12:22:18 +0200 Subject: [PATCH 18/24] added pagination route --- src/Resources/config/routing.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Resources/config/routing.yaml b/src/Resources/config/routing.yaml index 4e4bb6d..2afd6f2 100644 --- a/src/Resources/config/routing.yaml +++ b/src/Resources/config/routing.yaml @@ -13,6 +13,10 @@ runroom_samples.basic_entities.book: path: /book/{slug} controller: Runroom\SamplesBundle\BasicEntities\Controller\BookController::book +runroom_samples.basic_entities.books_list: + path: /pagination + controller: Runroom\SamplesBundle\BasicEntities\Controller\BookController::list + # Forms runroom_samples.forms.contact: path: /contact From b851da2dfc74cece9253015d831bcd49d7a7fe20 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 12:45:26 +0200 Subject: [PATCH 19/24] wip --- src/Resources/config/services.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index f76717f..fb78c1e 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -24,10 +24,6 @@ services: arguments: [null, Runroom\SamplesBundle\BasicEntities\Entity\Category, null] tags: - { name: sonata.admin, manager_type: orm, label: 'Categories' } - - Runroom\SamplesBundle\BasicEntities\Service\BookService: - public: true - arguments: [Runroom\SamplesBundle\BasicEntities\Repository\BookRepository, Knp\Component\Pager\PaginatorInterface] # Forms Runroom\SamplesBundle\Forms\Controller\: From 4dd3de0ded0d982ec7f280142d9e3f5452e8894d Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Aug 2020 13:35:19 +0200 Subject: [PATCH 20/24] wip dependencies --- src/Resources/config/services.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index fb78c1e..11152a0 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -24,6 +24,10 @@ services: arguments: [null, Runroom\SamplesBundle\BasicEntities\Entity\Category, null] tags: - { name: sonata.admin, manager_type: orm, label: 'Categories' } + + Runroom\SamplesBundle\BasicEntities\Service\BookService: + public: true + arguments: ['@Runroom\SamplesBundle\BasicEntities\Repository\BookRepository', '@knp_paginator'] # Forms Runroom\SamplesBundle\Forms\Controller\: From d2f30e4350de1b5ae15f92686718234a1e516f72 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 27 Aug 2020 11:30:05 +0200 Subject: [PATCH 21/24] get page number with request --- src/BasicEntities/Controller/BookController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/BasicEntities/Controller/BookController.php b/src/BasicEntities/Controller/BookController.php index d93aee7..fa7ca3b 100644 --- a/src/BasicEntities/Controller/BookController.php +++ b/src/BasicEntities/Controller/BookController.php @@ -15,6 +15,7 @@ use Runroom\RenderEventBundle\Renderer\PageRenderer; use Runroom\SamplesBundle\BasicEntities\Service\BookService; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class BookController @@ -53,8 +54,9 @@ public function book(string $slug): Response ); } - public function list(int $page): Response + public function list(Request $request): Response { + $page = $request->get('page', 1); $model = $this->service->getBooksListViewModel($page); return $this->renderer->renderResponse( From 753f362adc664dbc60b8726f3db71cc1338b349a Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 4 Sep 2020 15:35:39 +0200 Subject: [PATCH 22/24] fix typing --- src/BasicEntities/Controller/BookController.php | 2 +- src/BasicEntities/ViewModel/BooksListViewModel.php | 13 ++++++++++--- .../views/BasicEntities/book-list.html.twig | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/BasicEntities/Controller/BookController.php b/src/BasicEntities/Controller/BookController.php index fa7ca3b..d3acc0a 100644 --- a/src/BasicEntities/Controller/BookController.php +++ b/src/BasicEntities/Controller/BookController.php @@ -56,7 +56,7 @@ public function book(string $slug): Response public function list(Request $request): Response { - $page = $request->get('page', 1); + $page = (int) $request->get('page', 1); $model = $this->service->getBooksListViewModel($page); return $this->renderer->renderResponse( diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index 1fbe94f..40b35cc 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -18,20 +18,27 @@ class BooksListViewModel { - /** @var SlidingPaginationInterface */ + /** + * @phpstan-var SlidingPaginationInterface + * @psalm-var SlidingPaginationInterface + */ protected $pagination; /** @var array */ protected $paginationData; - /** @return SlidingPaginationInterface|null */ + /** @phpstan-return SlidingPaginationInterface|null + * @psalm-return SlidingPaginationInterface|null + */ public function getPagination(): ?SlidingPaginationInterface { return $this->pagination; } /** - * @param SlidingPaginationInterface $pagination */ + * @phpstan-param SlidingPaginationInterface $pagination + * @psalm-param SlidingPaginationInterface $pagination + * */ public function setPagination(SlidingPaginationInterface &$pagination): self { $this->pagination = $pagination; diff --git a/src/Resources/views/BasicEntities/book-list.html.twig b/src/Resources/views/BasicEntities/book-list.html.twig index 315719f..5b0bda8 100644 --- a/src/Resources/views/BasicEntities/book-list.html.twig +++ b/src/Resources/views/BasicEntities/book-list.html.twig @@ -4,4 +4,5 @@ {% for book in model.pagination.items %}

{{ book.title }}

{% endfor %} + {{ knp_pagination_render(model.pagination) }} {% endblock content %} \ No newline at end of file From 955cb9d2f72942d2ecbe4987294a65c6932ead78 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 4 Sep 2020 16:45:46 +0200 Subject: [PATCH 23/24] add edit action to book admin, max paginator results set to 5 + template --- src/BasicEntities/Admin/BookAdmin.php | 1 + src/BasicEntities/Service/BookService.php | 2 +- .../views/BasicEntities/book-list.html.twig | 22 ++++++++++++++----- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/BasicEntities/Admin/BookAdmin.php b/src/BasicEntities/Admin/BookAdmin.php index 4e7b074..93a0426 100644 --- a/src/BasicEntities/Admin/BookAdmin.php +++ b/src/BasicEntities/Admin/BookAdmin.php @@ -52,6 +52,7 @@ protected function configureListFields(ListMapper $listMapper): void ->add('_action', 'actions', [ 'actions' => [ 'delete' => [], + 'edit' => [], 'move' => [ 'template' => '@SortableBehavior/sort.html.twig', ], diff --git a/src/BasicEntities/Service/BookService.php b/src/BasicEntities/Service/BookService.php index 0e08493..09928a4 100644 --- a/src/BasicEntities/Service/BookService.php +++ b/src/BasicEntities/Service/BookService.php @@ -22,7 +22,7 @@ class BookService { /** @var int */ - private const MAX_RESULT = 10; + private const MAX_RESULT = 5; /** @var BookRepository */ private $repository; diff --git a/src/Resources/views/BasicEntities/book-list.html.twig b/src/Resources/views/BasicEntities/book-list.html.twig index 5b0bda8..fff211a 100644 --- a/src/Resources/views/BasicEntities/book-list.html.twig +++ b/src/Resources/views/BasicEntities/book-list.html.twig @@ -1,8 +1,20 @@ {% extends '@RunroomSamples/base.html.twig' %} {% block content %} - {% for book in model.pagination.items %} -

{{ book.title }}

- {% endfor %} - {{ knp_pagination_render(model.pagination) }} -{% endblock content %} \ No newline at end of file +
+
+
    + {% for book in model.pagination.items %} +
    +
  • + {{book.title}} +
  • +
    + {% endfor %} +
+
+ +
+{% endblock content %} From c07b911cb6553ca2a5f360e2d66292a4b89ce25b Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 4 Sep 2020 17:21:24 +0200 Subject: [PATCH 24/24] psalm slidingpagination --- src/BasicEntities/Service/BookService.php | 3 ++- src/BasicEntities/ViewModel/BooksListViewModel.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/BasicEntities/Service/BookService.php b/src/BasicEntities/Service/BookService.php index 09928a4..438ddba 100644 --- a/src/BasicEntities/Service/BookService.php +++ b/src/BasicEntities/Service/BookService.php @@ -13,6 +13,7 @@ namespace Runroom\SamplesBundle\BasicEntities\Service; +use Knp\Bundle\PaginatorBundle\Pagination\SlidingPaginationInterface; use Knp\Component\Pager\PaginatorInterface; use Runroom\SamplesBundle\BasicEntities\Repository\BookRepository; use Runroom\SamplesBundle\BasicEntities\ViewModel\BooksListViewModel; @@ -63,7 +64,7 @@ public function getBooksListViewModel(int $page): BooksListViewModel $queryBuilder = $this->repository->getBooksQueryBuilder(); $pagination = $this->paginator->paginate($queryBuilder, $page, self::MAX_RESULT); - + \assert($pagination instanceof SlidingPaginationInterface); $model = new BooksListViewModel(); $model->setPagination($pagination); diff --git a/src/BasicEntities/ViewModel/BooksListViewModel.php b/src/BasicEntities/ViewModel/BooksListViewModel.php index 40b35cc..d8f9814 100644 --- a/src/BasicEntities/ViewModel/BooksListViewModel.php +++ b/src/BasicEntities/ViewModel/BooksListViewModel.php @@ -39,7 +39,7 @@ public function getPagination(): ?SlidingPaginationInterface * @phpstan-param SlidingPaginationInterface $pagination * @psalm-param SlidingPaginationInterface $pagination * */ - public function setPagination(SlidingPaginationInterface &$pagination): self + public function setPagination(SlidingPaginationInterface $pagination): self { $this->pagination = $pagination; $this->paginationData = $pagination->getPaginationData();