Cannot determine controller argument for "App\Controller\PostsController::a
ddPost()": the $request argument is type-hinted with the non-existent class
or interface: "http\Env\Request".
Cannot determine controller argument for "App\Controller\PostsController::a
ddPost()": the $request argument is type-hinted with the non-existent class
or interface: "http\Env\Request".
Разобрался, проблема в том, что эти пути для Симфони одинаковы
@Route("/posts/{slug}", name="blog_show")
@Route("/posts/new", name="new_blog_post")
соответственно если в браузере пишем /posts/new - акшен работает верхний т.е. не addPost, а showPost, вопрос теперь - как эти 2 пути сделать уникальными (по "\d+" не получиться - строка и там и там)?
PS. Очень жду ответа, уже несколько дней на этом уроке туплю)
Привет, тоже мучился, можешь здесь почитать https://symfony.com/doc/current/routing.html там все подробно про таких проблемах написано, я лично использовал "requirments" к роутингу))
не знаю почему но у меня вот это не работает
$em = $this->getDoctrine()->getManager();
может потому что симфони 6 версии использую, решил вопрос вндрив в конструктор ManagerRegistry
Друзья в новых версиях Симфону(начиная с версии 5.4) разработчики полностью отказались от методов get() и has(), а также решили полностью отказаться от методов dispatchMessage() и getDoctrine(), см. https://symfony.com/blog/new-in-symfony-5-4-controller-changes.
Поэтому конструкции типа $this->getDoctrine()->getManager() работать не будут. Вместо этого необходимо использовать внедрение соответствующих зависимостей в конструктор или определенный метод.
Лично я внедрил ManagerRegistry прямо в конструктор потому что в следующих уроках он нам также понадобиться для редактирования записей в постах.
/* @var PostRepository $postRepository /
private $postRepository;
private $doctrine;
public function __construct(PostRepository $postRepository, ManagerRegistry $doctrine)
{
$this->postRepository = $postRepository;
$this->doctrine = $doctrine;
}
"Обратите внимание на то, что классы TextType и TextareaType должны быть загружены по следующим неймспейсам:
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType; "
а этот неймспейс можно убрать тогда?
Если он нигде не применяется, то да.
Подскажите, пож-ста, почему так получилось, что ext-http отсутствует в composer.json ?
это Storm ругается на Request
и после добавления ext-http надо php composer update сделать?
а use какой потом добавить?
use http\Env\Request;
не подойдёт же для Requesta?Вы не должны обращать на это внимание. И добавлять в композер не нужно. Это не влияет на работу приложения.
web сервер не стартует, ошибку могу вечером только показать, но там что-то про $request и http\Env\Request;
Ок, жду ошибку
web сервер не стартует
Потому что вы используете не тот Request, надо использовать Request по неймспейсу Symfony\Component\HttpFoundation\Request
так всегда происходит по дефолту? Надо потом вручную namespace менять?
если addPost в конце контроллера - то ошибка
если addPost поднять выше всех ф-ций - то ок
объясните пож-ста почему так
Разобрался, проблема в том, что эти пути для Симфони одинаковы
@Route("/posts/{slug}", name="blog_show")
@Route("/posts/new", name="new_blog_post")
соответственно если в браузере пишем /posts/new - акшен работает верхний т.е. не addPost, а showPost, вопрос теперь - как эти 2 пути сделать уникальными (по "\d+" не получиться - строка и там и там)?
PS. Очень жду ответа, уже несколько дней на этом уроке туплю)
сделал так
@Route("/posts/show/{slug}", name="blog_show")
@Route("/posts/add/new", name="new_blog_post")
но кажется это не очень правильно?
Привет, тоже мучился, можешь здесь почитать https://symfony.com/doc/current/routing.html там все подробно про таких проблемах написано, я лично использовал "requirments" к роутингу))
А в итоге ответы на эти вопросы в следующем уроке!
Браво, господа! Чую курс надо с конца читать. Одни и те же проблемы в каждом уроке.
ахах
Спасибо тебе
не знаю почему но у меня вот это не работает
$em = $this->getDoctrine()->getManager();
может потому что симфони 6 версии использую, решил вопрос вндрив в конструктор ManagerRegistry
Друзья в новых версиях Симфону(начиная с версии 5.4) разработчики полностью отказались от методов get() и has(), а также решили полностью отказаться от методов dispatchMessage() и getDoctrine(), см. https://symfony.com/blog/new-in-symfony-5-4-controller-changes.
Поэтому конструкции типа $this->getDoctrine()->getManager() работать не будут. Вместо этого необходимо использовать внедрение соответствующих зависимостей в конструктор или определенный метод.
Лично я внедрил ManagerRegistry прямо в конструктор потому что в следующих уроках он нам также понадобиться для редактирования записей в постах.
/* @var PostRepository $postRepository /
private $postRepository;
private $doctrine;
......
[Route('/post/new', name: 'new_blog_post')]