Здравствуйте!
Никак не получается настроить роутер через {slug}
Всё делал по
книге
Пока вместо слагов стоял Id всё работало как надо.
Поставил {slug} Symfony предъявил мне в show:
Cannot autowire argument $page of "App\Controller\PageController::show()": it needs an instance of "App\Entity\Page" but this type has been excluded in "config/services.yaml".
В services.yaml вставил
App\Entity\Page:
autowire: true
Теперь show стал показывать пустоту или точнее светлоголубую пустоту.
Вставил дамп и
App\Entity\Page {#762 ▼
-id: null
-title: null
-slug: null
-description: null
-cover: null
-body: null
-createdAt: null
}
Как я понимаю не находит он страницу по слагам этим по id находит, а по слагам нет.
Как заставить ума не приложу.
Контроллер:
namespace App\Controller;
use App\Entity\Page;
use App\Repository\PageRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class PageController extends AbstractController
{
#[Route('/', name: 'homepage')]
public function index(PageRepository $pageRepository): Response
{
return $this->render('page/index.html.twig', [
'pages' => $pageRepository->findAll(),
]);
}
#[Route('/{slug}', name: 'show-page')]
public function show(Request $request, Page $page): Response
{
return $this->render('/page/show.html.twig', [
'slug' => $page->getSlug(),
'page' => $page,
]);
}
}
Index.twig:
{% extends 'base.html.twig' %}
{% block title %}Hello PageController!{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
This friendly message is coming from:
<ul>
<li>Your controller at <code>/home/pv/www/lantico.site/src/Controller/PageController.php</code></li>
<li>Your template at <code>/home/pv/www/lantico.site/templates/page/index.html.twig</code></li>
</ul>
{% for page in pages %}
<h4>{{ page.title }}</h4>
<p>
<a href="{{ path('show-page', {slug: page.slug}) }}">{{ page }}</a>
</p>
{% endfor %}
</div>
{% endblock %}
show.twig.html
{% extends 'base.html.twig' %}
{% block title %}
{{ page.title }}
{% endblock %}
{% block body %}
<h2>{{ page.body }} </h2>
{{ dump(page) }}
{% endblock %}