Подскажите, пож-ста, как мы получили в переменную $post конкретный пост?
/**
* @Route("/posts/{slug}", name="blog_show")
*/
public function post (Post $post){
return $this->render('posts/show.html.twig',[
'post'=> $post]);
}
т.е. понятно, что Symfony нашёл пост по уникальному идентификатору из роута, а дальше как в экшене он оказался под именем $post?
Цитата:
"Поскольку мы унаследовались от AbstractController, мы можем достать репозиторий следующим образом и это будет первый способ:
$repo = $this->getDoctrine()->getRepository(Post::class);"
Цитирую:
"Теперь переходим в шаблон и пишем следующее:
{% extends 'base.html.twig' %}
{% block body %}
<p>{{ post.body }}</p>
{% endblock %}".
Какой шаблон??? Наверное, так и надо писать: "В шаблон show.html.twig..."
Да этот файл еще создать надо, или он автоматически создается?
Чайники приходят учиться, на них и рассчитывайте :))
Не знаю, как это у вас работает, но у меня в переменной оказывается строка.
Нужно регистрировать бандл и использовать autowire, в readme библиотеки всё написано.
Кто подскажет, как решить проблему с полученной строкой в __construct()?
Argument 1 passed to App\DataFixtures\AppFixtures::__construct() must be an instance of Cocur\Slugify\Slugify, string given, called in /var/www/html/var/cache/dev/ContainerI8f0Fva/getDoctrine_FixturesLoad
CommandService.php on line 36
Подскажите, пож-ста, как мы получили в переменную $post конкретный пост?
т.е. понятно, что Symfony нашёл пост по уникальному идентификатору из роута, а дальше как в экшене он оказался под именем $post?
https://symfony.com/doc/4.0/bundles/SensioFrameworkExtraBundle/annotations/converters.html
Значит, symfony ищет сам в базе по полю через плейсхолдер? Или я так не понял(
точно
Тоже интересно почитать, но ссылка уже не работает(
Цитата:
"Поскольку мы унаследовались от AbstractController, мы можем достать репозиторий следующим образом и это будет первый способ:
$repo = $this->getDoctrine()->getRepository(Post::class);"
А какое значение возвращает $this->getDoctrine()?
$this->getDoctrine() возвращает ManagerRegistry. Узнать это можно, если в шторме кликнете на метод.
Благодарю )
Цитата:
"Возвращаемся в шаблон posts/index.html.twig и меняем ссылку на новую:
<a href="{{ path('blog_show', {'slug': post.slug}) }}">{{ post.title }}</a>".
Так мы в этом шаблоне и находимся, и только что написали в нем:
Да, видимо не так просто эту "симфоническую мелодию" объяснить так, чтобы сразу все стало понятно ))
Мы не в нем находимся. Это шаблон show.html.twig, а ссылка из index.html.twig.
Цитирую:
"Теперь переходим в шаблон и пишем следующее:
{% extends 'base.html.twig' %}
{% block body %}
<p>{{ post.body }}</p>
{% endblock %}".
Какой шаблон??? Наверное, так и надо писать: "В шаблон show.html.twig..."
Да этот файл еще создать надо, или он автоматически создается?
Чайники приходят учиться, на них и рассчитывайте :))
Если репозиторий доставать способом
то может вылезти ошибка "some mandatory parameters are missing", так что юзайте конструктор, как тут описано.
У меня такой ошибки не возникло
Ссылка на posts/show.html.twig почему-то не работает. Пишет
Class App\Controller\Post does not exist
Где я допустил ошибку?
Всё, понял
Тоже попался, пока исправлял баги с фикстурами, случайно удалил
Кто подскажет, как решить проблему с полученной строкой в __construct()?
Argument 1 passed to App\DataFixtures\AppFixtures::__construct() must be an instance of Cocur\Slugify\Slugify, string given, called in /var/www/html/var/cache/dev/ContainerI8f0Fva/getDoctrine_FixturesLoad
CommandService.php on line 36
в файл config/bundles.php добавь:
и вместо Slugify используй SlugifyInterface