66msgid ""
77msgstr ""
88"Project-Id-Version : PACKAGE VERSION\n "
9- "POT-Creation-Date : 2025-12-24 13:00 +0000\n "
9+ "POT-Creation-Date : 2025-12-25 21:55 +0000\n "
1010"PO-Revision-Date : 2025-09-04 11:19+0500\n "
1111"Last-Translator : Automatically generated\n "
1212"Language-Team : none\n "
@@ -165,18 +165,13 @@ msgstr ""
165165
166166#. type: Plain text
167167#: ../src/guide/start/databases.md
168- msgid "Let's use latest versions to be released. Change your `minimum-stability` to `dev` in `composer.json` first."
169- msgstr ""
170-
171- #. type: Plain text
172- #: ../src/guide/start/databases.md
173- msgid "Then we need a package to be installed:"
168+ msgid "First we need a package to be installed:"
174169msgstr ""
175170
176171#. type: Fenced code block (sh)
177172#: ../src/guide/start/databases.md
178173#, no-wrap
179- msgid "make composer require yiisoft/db-pgsql dev-master \n"
174+ msgid "make composer require yiisoft/db-pgsql\n"
180175msgstr ""
181176
182177#. type: Plain text
@@ -260,7 +255,7 @@ msgstr ""
260255#. type: Fenced code block (sh)
261256#: ../src/guide/start/databases.md
262257#, no-wrap
263- msgid "composer require yiisoft/db-migration dev-master \n"
258+ msgid "make composer require yiisoft/db-migration\n"
264259msgstr ""
265260
266261#. type: Plain text
@@ -296,9 +291,6 @@ msgid ""
296291"use Yiisoft\\ Db\\ Migration\\ MigrationBuilder;\n"
297292"use Yiisoft\\ Db\\ Migration\\ RevertibleMigrationInterface;\n"
298293"\n"
299- "/**\n"
300- " * Class M251102141707Page\n"
301- " */\n"
302294"final class M251102141707Page implements RevertibleMigrationInterface\n"
303295"{\n"
304296" public function up(MigrationBuilder $b): void\n"
@@ -350,6 +342,8 @@ msgstr ""
350342msgid ""
351343"<?php\n"
352344"\n"
345+ "declare(strict_types=1);\n"
346+ "\n"
353347"namespace App\\ Web\\ Page;\n"
354348"\n"
355349"use DateTimeImmutable;\n"
@@ -419,6 +413,8 @@ msgstr ""
419413msgid ""
420414"<?php\n"
421415"\n"
416+ "declare(strict_types=1);\n"
417+ "\n"
422418"namespace App\\ Web\\ Page;\n"
423419"\n"
424420"use DateTimeImmutable;\n"
@@ -486,9 +482,9 @@ msgid ""
486482" );\n"
487483" }\n"
488484"\n"
489- " public function delete (string $id ): void\n"
485+ " public function deleteBySlug (string $slug ): void\n"
490486" {\n"
491- " $this->connection->createCommand()->delete('{{%page}}', ['id ' => $id ])->execute();\n"
487+ " $this->connection->createCommand()->delete('{{%page}}', ['slug ' => $slug ])->execute();\n"
492488" }\n"
493489"}\n"
494490msgstr ""
@@ -501,7 +497,7 @@ msgstr ""
501497
502498#. type: Plain text
503499#: ../src/guide/start/databases.md
504- msgid "You need actions to:"
500+ msgid "You need to be able to:"
505501msgstr ""
506502
507503#. type: Bullet: '1. '
@@ -528,3 +524,205 @@ msgstr ""
528524#: ../src/guide/start/databases.md
529525msgid "Edit a page."
530526msgstr ""
527+
528+ #. type: Plain text
529+ #: ../src/guide/start/databases.md
530+ msgid "Let's tackle these one by one."
531+ msgstr ""
532+
533+ #. type: Title ###
534+ #: ../src/guide/start/databases.md
535+ #, no-wrap
536+ msgid "List all pages"
537+ msgstr ""
538+
539+ #. type: Plain text
540+ #: ../src/guide/start/databases.md
541+ msgid "Create `src/Web/Page/ListAction.php`:"
542+ msgstr ""
543+
544+ #. type: Fenced code block (php)
545+ #: ../src/guide/start/databases.md
546+ #, no-wrap
547+ msgid ""
548+ "<?php\n"
549+ "\n"
550+ "declare(strict_types=1);\n"
551+ "\n"
552+ "namespace App\\ Web\\ Page;\n"
553+ "\n"
554+ "use Psr\\ Http\\ Message\\ ResponseInterface;\n"
555+ "use Yiisoft\\ Yii\\ View\\ Renderer\\ ViewRenderer;\n"
556+ "\n"
557+ "final readonly class ListAction\n"
558+ "{\n"
559+ " public function __construct(\n"
560+ " private ViewRenderer $viewRenderer,\n"
561+ " private PageRepository $pageRepository,\n"
562+ " )\n"
563+ " {\n"
564+ " }\n"
565+ "\n"
566+ " public function __invoke(): ResponseInterface\n"
567+ " {\n"
568+ " return $this->viewRenderer->render(__DIR__ . '/list', [\n"
569+ " 'pages' => $this->pageRepository->findAll(),\n"
570+ " ]);\n"
571+ " }\n"
572+ "}\n"
573+ msgstr ""
574+
575+ #. type: Plain text
576+ #: ../src/guide/start/databases.md
577+ msgid "Define list view in `src/Web/Page/list.php`:"
578+ msgstr ""
579+
580+ #. type: Fenced code block (php)
581+ #: ../src/guide/start/databases.md
582+ #, no-wrap
583+ msgid ""
584+ "<?php\n"
585+ "use App\\ Web\\ Page\\ Page;\n"
586+ "use Yiisoft\\ Html\\ Html;\n"
587+ "\n"
588+ "/** @var iterable<Page> $pages */\n"
589+ "?>\n"
590+ "\n"
591+ "<ul>\n"
592+ " <?php foreach ($pages as $page): ?>\n"
593+ " <li>\n"
594+ " <?= Html::a($page->title, $this->urlGenerator->generate('page/view', ['slug' => $page->slug])) ?>\n"
595+ " </li>\n"
596+ " <?php endforeach ?>\n"
597+ "</ul>\n"
598+ msgstr ""
599+
600+ #. type: Title ###
601+ #: ../src/guide/start/databases.md
602+ #, no-wrap
603+ msgid "View a page"
604+ msgstr ""
605+
606+ #. type: Plain text
607+ #: ../src/guide/start/databases.md
608+ msgid "Create `src/Web/Page/ViewAction.php`:"
609+ msgstr ""
610+
611+ #. type: Fenced code block (php)
612+ #: ../src/guide/start/databases.md
613+ #, no-wrap
614+ msgid ""
615+ "<?php\n"
616+ "\n"
617+ "declare(strict_types=1);\n"
618+ "\n"
619+ "namespace App\\ Web\\ Page;\n"
620+ "\n"
621+ "use Psr\\ Http\\ Message\\ ResponseFactoryInterface;\n"
622+ "use Psr\\ Http\\ Message\\ ResponseInterface;\n"
623+ "use Yiisoft\\ Http\\ Status;\n"
624+ "use Yiisoft\\ Router\\ HydratorAttribute\\ RouteArgument;\n"
625+ "use Yiisoft\\ Yii\\ View\\ Renderer\\ ViewRenderer;\n"
626+ "\n"
627+ "final readonly class ViewAction\n"
628+ "{\n"
629+ " public function __construct(\n"
630+ " private ViewRenderer $viewRenderer,\n"
631+ " private PageRepository $pageRepository,\n"
632+ " private ResponseFactoryInterface $responseFactory\n"
633+ " )\n"
634+ " {\n"
635+ " }\n"
636+ "\n"
637+ " public function __invoke(\n"
638+ " #[RouteArgument('slug')]\n"
639+ " string $slug\n"
640+ " ): ResponseInterface\n"
641+ " {\n"
642+ " $page = $this->pageRepository->findOneBySlug($slug);\n"
643+ " if ($page === null || $page->isDeleted()) {\n"
644+ " return $this->responseFactory->createResponse(Status::NOT_FOUND);\n"
645+ " }\n"
646+ "\n"
647+ " return $this->viewRenderer->render(__DIR__ . '/view', [\n"
648+ " 'page' => $page,\n"
649+ " ]);\n"
650+ " }\n"
651+ "}\n"
652+ msgstr ""
653+
654+ #. type: Plain text
655+ #: ../src/guide/start/databases.md
656+ msgid "Now, a template in `src/Web/Page/view.php`:"
657+ msgstr ""
658+
659+ #. type: Fenced code block (php)
660+ #: ../src/guide/start/databases.md
661+ #, no-wrap
662+ msgid ""
663+ "<?php\n"
664+ "use App\\ Web\\ Page\\ Page;\n"
665+ "use Yiisoft\\ Html\\ Html;\n"
666+ "\n"
667+ "/** @var Page $page */\n"
668+ "?>\n"
669+ "\n"
670+ "<h1><?= Html::encode($page->title) ?></h1>\n"
671+ "\n"
672+ "<p>\n"
673+ " <?= Html::encode($page->text) ?>\n"
674+ "</p>\n"
675+ msgstr ""
676+
677+ #. type: Title ###
678+ #: ../src/guide/start/databases.md
679+ #, no-wrap
680+ msgid "Delete a page"
681+ msgstr ""
682+
683+ #. type: Plain text
684+ #: ../src/guide/start/databases.md
685+ msgid "Create `src/Web/Page/DeleteAction.php`:"
686+ msgstr ""
687+
688+ #. type: Fenced code block (php)
689+ #: ../src/guide/start/databases.md
690+ #, no-wrap
691+ msgid ""
692+ "<?php\n"
693+ "\n"
694+ "declare(strict_types=1);\n"
695+ "\n"
696+ "namespace App\\ Web\\ Page;\n"
697+ "\n"
698+ "use Psr\\ Http\\ Message\\ ResponseFactoryInterface;\n"
699+ "use Psr\\ Http\\ Message\\ ResponseInterface;\n"
700+ "use Yiisoft\\ Http\\ Status;\n"
701+ "use Yiisoft\\ Router\\ UrlGeneratorInterface;\n"
702+ "\n"
703+ "final readonly class DeleteAction\n"
704+ "{\n"
705+ " public function __construct(\n"
706+ " private PageRepository $pageRepository,\n"
707+ " private ResponseFactoryInterface $responseFactory,\n"
708+ " private UrlGeneratorInterface $urlGenerator,\n"
709+ " )\n"
710+ " {}\n"
711+ "\n"
712+ " public function __invoke(string $slug): ResponseInterface\n"
713+ " {\n"
714+ " $this->pageRepository->deleteBySlug($slug);\n"
715+ "\n"
716+ " return $this->responseFactory\n"
717+ " ->createResponse()\n"
718+ " ->withStatus(Status::PERMANENT_REDIRECT)\n"
719+ " ->withHeader('Location', $this->urlGenerator->generate('page/list'));\n"
720+ " }\n"
721+ "}\n"
722+ msgstr ""
723+
724+ #. type: Title ###
725+ #: ../src/guide/start/databases.md
726+ #, no-wrap
727+ msgid "Create a page"
728+ msgstr ""
0 commit comments