Проблем с добавянето на статии към HeidiSQL от Blog - PHP and Symfony
Моля, за помощ за завършването на този проект. Ето докъде съм стигнал:
- Успешно регистрирам потребители и те се записват в базата данни в HeidiSQL.
- Проблем с тази задача се появи на стъпка IV.9. - Implementing Article Create Function, зс това, че не се генерира “createView“ (както каза Калин – създадох си го сам). Но точно в тази точка от проекта хем се казва „we need to create a new function. We will name it “createAction”“, хем после създадената функция носи името „create“, вместо “createAction”???
- Когато тествах кода си на тази стъка, все пак се появи линк за създаване на статия, но като зададох име и съдържание на статията, те не се запомняха и не се появиха в базата данни.
- Затова и прилагам кода си от файл ArticleController.php: https://pastebin.com/mj7Pjte5
- Прилагам и линк към грешката, която браузърът ми дава, като му подавам да иде на адрес“http://localhost:8000/article/create”: https://photos.google.com/photo/AF1QipPKETRqubVvFTttjtkRux4ngKaQFShxZ_n5zvg5 Преди не ми даваше такава грешка, а отваряше формата за статии, които обаче не се запаметяваха в БД(както вече описах в т.3). Странно как, като приключих всички стъпки от проекта, бутона „create“ изчезна…
Благодаря за бързия отговор.
Така е - липсваше ми Route към фунцията create, затова добавих следната анотация към фунцията create:
Като сега ми дава следните грешки:
NotFoundHttpException: No route found for "GET /article/create"
ResourceNotFoundException:
Явно в ArticleController.php има и друго за оправяне. Например в първата функция createAction ми подчертава всичко това:
Не може да имаш две функции с един и същ Route, request method и name. Ако и двете функции ти слушат на article/create, трябва да са на различни requesst method-и поне (GET, POST) и name-а на Route да е различен (както говорихме на лекция - това са все едно ключове в речник, два еднакви ключа означава едното да override-не другото).
Може на долния метод, който обработва формата да му смениш каквото пише в name="". и да добавиш още една анотация - @Method({"POST"}), а на горния да добавиш @Method({"GET"}). Което означава че едната функция ще се извика само при непопълнен формуляр, а другата само при попълнен (за да няма двузначност).
Друг вариант е да изместиш всичко в една функция, както правихме на лекция (т.е. да имаш само втората функция, а първата да я изтриеш).
Много благодаря за подробните разяснения.
Изтрих функцията createAction, но пак ми дава следните грешки:
No route found for "GET /article/create"
404 Not Found - NotFoundHttpException
1 linked Exception:
ResourceNotFoundException »
[2/2] NotFoundHttpException: No route found for "GET /article/create" +
[1/2] ResourceNotFoundException:
А ето как ми изглежда сега файла ArticleController.php: https://pastebin.com/SmmjiQCh.
Три дни отделих, за да разбера тези толкова логични връзки в този основен и ключов проект, но уви...
нямаш @ пред Route :)
За съжаление не е само това…
Направих трети път този проект (последно на InteliJ IDEA + 2 пъти на PhpStorm) и файлът create.html.twig успя сам да се генерира, но имам несъответствия в Entity->Article.php и User.php и сега дори не мога да упдейтна базата (странно как преди ми разреши, при положение, че също имах несъответствия там).
Моля, ако може никой да го качи или да ми го прати, дори и след срока за предаване, все пак е базов.
Дай да ги видим двете ентитита
Вече нещата стоят така:
1 В ArticleController.php вече няма проблеми.
2 Записват се статии в базата, но на http://localhost:8000/ ми дава следната грешка:
"Class 'SoftUniBlogBundle\Controller\Article' does not exist
500 Internal Server Error - MappingException"
2 Все още Entity/Article.php дава проблем на ред 151 от ф-ята addPost(Article $article) :
https://pastebin.com/pApAKmtr
3 В HomeController.php ми казава на последния ред "недефинирана променлива '$articles'":
class HomeController extends Controller
{
/**
* @Route("/", name="blog_index")
* @Method("GET")
*/
public function indexAction()
{
$article = $this->getDoctrine()->getRepository(Article::class)->findAll();
return $this->render('blog/index.html.twig', ['articles'=>$articles]);
}
}
Светка ли ти в ИДЕ-то това Article::class? Предполатам нямаш use statement - ако свети дай alt+enter и го import-ни. За другото - грешката е видима - използваш грешно име на променлива :)
Мда, в HomeController променливата я оправих на $articles и там сега е спокойно, но
нито в ArticleController, нито в HomeController ми свети Article::class.
В Entity\Article.php ми свети "SoftUniBlogBundle\Entity\Article" тук:
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="SoftUniBlogBundle\Entity\Article", mappedBy="author"
*/
private $articles;
и все така подчертава на ф-ята addPost(Article $article) - "return $this;"
Не бях обърнал внимание, че в Resources/SoftUniBlogBundle.php класа
class SoftUniBlogBundle extends Bundleе празен?
И така грешката "Class 'SoftUniBlogBundle\Controller\Article' does not exist" при стартиране на индекс страницата си остава, а всичко друго по блога работи.
Добре там в addPost значи свети този Article :) то вероятно ти пише на кой ред е в грешката в браузъра
Това казва браузъра:
https://photos.google.com/photo/AF1QipNvtFn50wqmyvi1-ZPim_m2Uv20JsoiykeA-xh2