Loading...
hrimar avatar hrimar 6 Точки

Проблем с добавянето на статии към HeidiSQL от Blog - PHP and Symfony

Моля, за помощ за завършването на този проект. Ето докъде съм стигнал:

  1. Успешно регистрирам потребители и те се записват в базата данни в HeidiSQL.
  2. Проблем с тази задача се появи на стъпка IV.9. - Implementing Article Create Function, зс това, че не се генерира “createView“ (както каза Калин – създадох си го сам). Но точно в тази точка от проекта хем се казва „we need to create a new function. We will name it “createAction”“, хем после създадената функция носи името „create“, вместо “createAction”???
  3. Когато тествах кода си на тази стъка,  все пак се появи линк за създаване на статия, но като зададох име и съдържание на статията, те не се запомняха и не се появиха в базата данни.
  4. Затова и прилагам кода си от файл ArticleController.php:  https://pastebin.com/mj7Pjte5
  5. Прилагам и линк към грешката, която браузърът ми дава, като му подавам да иде на адрес“http://localhost:8000/article/create”:  https://photos.google.com/photo/AF1QipPKETRqubVvFTttjtkRux4ngKaQFShxZ_n5zvg5   Преди не ми даваше такава грешка, а отваряше формата за статии, които обаче не се запаметяваха в БД(както вече описах в т.3). Странно как, като приключих всички стъпки от проекта, бутона „create“ изчезна…

 

 

0
Софтуерни технологии 24/07/2017 10:57:17
RoYaL avatar RoYaL Trainer 6849 Точки

Здравей,

create функцията ти няма Route, съответно няма как да изпратиш формуляр към нея, не знае на кой адрес да се изпълни.

0
hrimar avatar hrimar 6 Точки

Благодаря за бързия отговор.

Така е - липсваше ми Route към фунцията create, затова добавих следната анотация към фунцията create:

/**
 * @Route("/article/create", name="article_create")
 *
 * @return \Symfony\Component\HttpFoundation\Response
 */

Като сега ми дава следните грешки:

 NotFoundHttpException: No route found for "GET /article/create"  +

 ResourceNotFoundException:   +

 

Явно в ArticleController.php има и друго за оправяне. Например в първата функция createAction ми подчертава всичко това:

return $this->render('article/create.html.twig',
    array('form' => $form->createView()));
0
RoYaL avatar RoYaL Trainer 6849 Точки

Не може да имаш две функции с един и същ Route, request method и name. Ако и двете функции ти слушат на article/create, трябва да са на различни requesst method-и поне (GET, POST) и name-а на Route да е различен (както говорихме на лекция - това са все едно ключове в речник, два еднакви ключа означава едното да override-не другото).

Може на долния метод, който обработва формата да му смениш каквото пише в name="". и да добавиш още една анотация - @Method({"POST"}), а на горния да добавиш @Method({"GET"}). Което означава че едната функция ще се извика само при непопълнен формуляр, а другата само при попълнен (за да няма двузначност).

Друг вариант е да изместиш всичко в една функция, както правихме на лекция (т.е. да имаш само втората функция, а първата да я изтриеш).

0
hrimar avatar hrimar 6 Точки

Много благодаря за подробните разяснения.

Изтрих функцията 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.

Три дни отделих, за да разбера тези толкова логични връзки в този основен и ключов проект, но уви...

0
RoYaL avatar RoYaL Trainer 6849 Точки

нямаш @ пред Route :)

0
hrimar avatar hrimar 6 Точки

За съжаление не е само това…

Направих трети път този проект (последно на InteliJ IDEA + 2 пъти на PhpStorm) и файлът create.html.twig успя сам да се генерира, но имам несъответствия в Entity->Article.php и User.php и сега дори не мога да упдейтна базата (странно как преди ми разреши, при положение, че също имах несъответствия там).

Моля, ако може никой да го качи или да ми го прати, дори и след срока за предаване, все пак е базов.

0
25/07/2017 14:29:17
RoYaL avatar RoYaL Trainer 6849 Точки

Дай да ги видим двете ентитита

0
hrimar avatar hrimar 6 Точки

Вече нещата стоят така:

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]);
    }
}

0
26/07/2017 09:33:54
RoYaL avatar RoYaL Trainer 6849 Точки

Светка ли ти в ИДЕ-то това Article::class? Предполатам нямаш use statement - ако свети дай alt+enter и го import-ни. За другото - грешката е видима - използваш грешно име на променлива :)

0
hrimar avatar hrimar 6 Точки

Мда, в 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" при стартиране на индекс страницата си остава, а всичко друго по блога работи.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Добре там в addPost значи свети този Article :) то вероятно ти пише на кой ред е в грешката в браузъра

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.