Bonjour,
Je suis les formations de grafikart depuis un moment et je suis arrivé à la mise en pratique de la POO, la validation des données.
Je rencontre un problème avec les vues d'éditions d'articles et de création.
Je vais prendre pour exemple l'édition d'un article, car l'erreur est quasi la même

Ce que je fais

Code AdminBlogAction

/**
     * Edite un article
     * @param Request $request
     * @return ResponseInterface|string
     */
    public function edit(Request $request)
    {
        $item = $this->postTable->find($request->getAttribute('id'));

        if ($request->getMethod() === 'POST') {
            $params = $this->getParams($request);
            $params['updated_at'] = date('Y-m-d H:i:s');
            $validator = $this->getValidator($request);
            if ($validator->isValid()) {
                $this->postTable->update($item->id, $params);
                $this->flash->success('L\'article a bien été modifié');
                return $this->redirect('blog.admin.index');
            }
            $errors = $validator->getErrors();
            $params['id'] = $item->id;
            $item = $params;
        }

        return $this->renderer->render('@blog/admin/edit', compact('item', 'errors'));
    }

Code TwigRenderer

/**
     * Permet de rendre une vue
     * Le chemin peut être précisé avec des namespace rajoutés via addPath()
     * $this->render('@blog/view');
     * $this->render('view');
     * @param string $view
     * @param array $params
     * @return string
     */
    public function render(string $view, array $params = []): string
    {
        return $this->twig->render($view . '.twig', $params);
    }

Ce que j'obtiens

J'obtiens l'erreur sur l'édition d'un article :
compact(): Undefined variable: errors

J'obtiens l'erreur sur la création d'un article
compact(): Undefined variable: item

4 réponses


Carouge10
Réponse acceptée

Bonjour
$error n'est défini que si tu valides le formulaire
or lors de son affichage, tu ne passes pas dans le if
essaye de mettre $error = ""; avant le

Ybag
Auteur

J'ai essayé de définir la variable $errors avant mon return, toujours la même erreur.
J'ai les fichiers sources de la formation, j'ai beau comparer les fichiers, copier/coller, rien à faire

quel est le code de ton essai ?

Ybag
Auteur

J'ai mal lu ton message...
Effectivement ça fonctionne

/**
     * Edite un article
     * @param Request $request
     * @return ResponseInterface|string
     */
    public function edit(Request $request)
    {
        $item = $this->postTable->find($request->getAttribute('id'));
        $errors = '';
        if ($request->getMethod() === 'POST') {
            $params = $this->getParams($request);
            $params['updated_at'] = date('Y-m-d H:i:s');
            $validator = $this->getValidator($request);
            if ($validator->isValid()) {
                $this->postTable->update($item->id, $params);
                $this->flash->success('L\'article a bien été modifié');
                return $this->redirect('blog.admin.index');
            }
            $errors = $validator->getErrors();
            $params['id'] = $item->id;
            $item = $params;
        }

        return $this->renderer->render('@blog/admin/edit', compact('item', 'errors'));
    }

    /**
     * Crée un nouvel article
     * @param Request $request
     * @return ResponseInterface|string
     */
    public function create(Request $request)
    {
        $item = '';
        $errors ='';
        if ($request->getMethod() === 'POST') {
            $params = $this->getParams($request);
            $params = array_merge($params, [
                'updated_at' => date('Y-m-d H:i:s'),
                'created_at' => date('Y-m-d H:i:s')
            ]);
            $validator = $this->getValidator($request);
            if ($validator->isValid()) {
                $this->postTable->insert($params);
                $this->flash->success('L\'article a bien été modifié');
                return $this->redirect('blog.admin.index');
            }
            $item = $params;
            $errors = $validator->getErrors();
        }

        return $this->renderer->render('@blog/admin/create', compact('item', 'errors'));
    }