Symfony 4 - Créer un blog pas à pas - Créer une interface d'administration

14 novembre 2019 - : MVC Tutoriel Symfony Live-Coding - : 32 commentaires - Tutoriel Framework Base de données MVC Symfony Live-Coding

Visualisez les fichiers de cette série sur GitHub

Après avoir mis en place notre site, il est souvent nécessaire de créer une interface d'administration, qui permettra de créer, modifier, et supprimer différents types de contenus.

Cette interface d'administration peut être créée de toute pièce ou peut être créée en utilisant un bundle disponible sur Symfony, appelé Easy Admin, que nous utiliserons ici.

Avant toute chose, nous aurons besoin d'installer différents outils qui nous permettront :

  • De générer automatiquement les "slugs"
  • De générer automatiquement les dates de création et mise à jour
  • De créer des articles en utilisant un éditeur "Wysiwyg" qui permettra de mettre le texte en forme
  • D'ajouter une image pour illustrer l'article

Création des slugs

Voir cette partie en vidéo

Lors de l'ajout d'un article, nous allons générer une version simplifiée de son titre qui sera utilisée dans les routes pour générer des urls qui seront plus compréhensibles. Il s'agit d'un "slug". Le slug ne contient ni majuscules, ni accents, ni espaces ni caractères spéciaux.

Pour commencer nous allons installer les extensions Doctrine qui nous permettront d'effectuer cette tâche

composer require stof/doctrine-extensions-bundle

Une fois ces extensions installées, nous allons activer l'extension "Sluggable".

Celà se passe dans le fichier "config/packages/stof_doctrine_extensions.yaml", fichier à créer si il n'est pas présent

# Read the documentation: https://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html
# See the official DoctrineExtensions documentation for more details: https://github.com/Atlantic18/DoctrineExtensions/tree/master/doc/
stof_doctrine_extensions:
    default_locale: fr_FR
    orm:
        default:
            sluggable: true

Nous allons ensuite ajouter le "use" ci-dessous dans la ou les entités contenant des slugs

use Gedmo\Mapping\Annotation as Gedmo;

Enfin, dans ces mêmes entités, nous allons modifier l'annotation de la propriété "slug"

/**
 * @Gedmo\Slug(fields={"titre"})
 * @ORM\Column(length=128, unique=true)
 */
private $slug;

Il est également nécessaire de supprimer le "setter" setSlug.

Mise en place des dates de création et mise à jour

Voir cette partie en vidéo

Lors de l'ajout d'un article, nous allons générer automatiquement la date de création et la date de mise à jour.

Pour commencer nous allons installer les extensions Doctrine qui nous permettront d'effectuer cette tâche (inutile si vous avez effectué la partie précédente)

composer require stof/doctrine-extensions-bundle

Une fois ces extensions installées, nous allons activer l'extension "Timestampable".

Celà se passe dans le fichier "config/packages/stof_doctrine_extensions.yaml", fichier à créer si vous n'avez pas effectué la partie précédente

# Read the documentation: https://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html
# See the official DoctrineExtensions documentation for more details: https://github.com/Atlantic18/DoctrineExtensions/tree/master/doc/
stof_doctrine_extensions:
    default_locale: fr_FR
    orm:
        default:
            timestampable: true

Nous allons ensuite ajouter le "use" ci-dessous dans la ou les entités contenant des dates

use Gedmo\Mapping\Annotation as Gedmo;

Enfin, dans ces mêmes entités, nous allons modifier l'annotation des propriétés de date

    /**
     * @var \DateTime $created_at
     * 
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(type="datetime")
    */
    private $created_at;

    /**
     * @var \DateTime $updated_at
     *
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(type="datetime")
     */
    private $updated_at;

Il est également nécessaire de supprimer les "setters" setCreatedAt et setUpdatedAt si ils existent.

L'éditeur Wysiwig

Voir cette partie en vidéo

Nous utiliserons un éditeur appelé CKEditor, disponible en téléchargement pour tout projet sur le site officiel, et adapté à Symfony par le groupe "Friends of Symfony", sous le nom FOSCkeditor.

Installer CKEditor

Pour procéder à l'installation de FOSCkeditor, nous allons utiliser le terminal et composer.

La 1ère commande à entrer dans le terminal va récupérer CKEditor et l'intégrer à Symfony et au dossier vendor.

composer require friendsofsymfony/ckeditor-bundle

Il faudra ensuite télécharger les ressources nécessaires au fonctionnement de CKEditor (HTML, CSS, Javascript) et les installer.

php bin/console ckeditor:install

Enfin, nous allons installer toutes les ressources nécessaires dans le dossier "public"

php bin/console assets:install public

Voilà CKEditor maintenant installé.

Configurer CKEditor

Une fois installé, CKEditor est configurable directement depuis le fichier "config/packages/fos_ckeditor.yaml" qui a été créé automatiquement

Par défaut, il contient les lignes suivantes

# Read the documentation: https://symfony.com/doc/current/bundles/FOSCKEditorBundle/index.html

twig:
    form_themes:
        - '@FOSCKEditor/Form/ckeditor_widget.html.twig'

Nous allons y ajouter les configurations qui nous intéressent, et principalement la liste des options qui seront proposées aux utilisateurs.

Dans l'exemple ci-dessous, nous créons une configuration appelée "main_config" en ajoutant quelques lignes dans le fichier

# Read the documentation: https://symfony.com/doc/current/bundles/FOSCKEditorBundle/index.html

twig:
    form_themes:
        - '@FOSCKEditor/Form/ckeditor_widget.html.twig'

fos_ck_editor:
    configs:
        main_config:
            toolbar:
                - { name: "styles", items: ['Bold', 'Italic', 'Underline', 'Strike', 'Blockquote', '-', 'Link', '-', 'RemoveFormat', '-', 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'Image', 'Table', '-', 'Styles', 'Format','Font','FontSize', '-', 'TextColor', 'BGColor', 'Source'] }

L'upload d'images

Voir cette partie en vidéo

Pour pouvoir envoyer l'image d'illustration lors de l'ajout d'un article, il va être nécessaire de modifier l'entité "Articles" afin de prendre en compte cette option. A ce stade, notre entité "Articles" contient une propriété de type texte pour stocker le nom du fichier.

Le bundle Vich Uploader va nous permettre de paramétrer l'envoi de fichiers de façon simple.

Installer Vich Uploader

Pour installer le bundle Vich Uploader, nous allons utiliser composer.

composer require vich/uploader-bundle

Après cette installation, nous allons configurer l'emplacement des fichiers après l'upload.

Cette configuration sera à effectuer dans plusieurs fichiers YAML.

Le premier d'entre eux, "services.yaml", contiendra le paramètre qui formalisera le chemin vers le dossier d'upload ainsi qu'un nom qui sera attribué à ce chemin, ici "featured_images". "app.path" permet de spécifier que notre valeur est un chemin.

parameters:
    app.path.featured_images: /uploads/images/featured

Dans le deuxième fichier, "vich_uploader.yaml" nous allons configurer le "mapping", c'est à dire le lien entre le chemin et le nom attribué dans l'uploader. Les différentes valeurs se comprennent comme ceci :

  • uri_prefix : préfixe de l'url, deviendra "/uploads/images/featured" dans notre exemple
  • namer : permet de spécifier quel système de "nommage" nous souhaitons, ici, nommage unique, deux fichiers ne pourront pas avoir le même nom
  • upload_destination : A quel endroit les images doivent-elles être stockées
vich_uploader:
    db_driver: orm
    
    mappings:
        featured_images:
            uri_prefix: '%app.path.featured_images%'
            namer: Vich\UploaderBundle\Naming\UniqidNamer
            upload_destination: '%kernel.project_dir%/public%app.path.featured_images%'

Enfin, nous allons mettre à jour notre entité pour que Vich Uploader fasse le lien entre la propriété "featured_image" et le fichier envoyé.

Les modifications à apporter dans l'entité "Articles" sont les suivantes

// Au début du fichier
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;


// Juste au dessus de la classe Articles
/**
 * @ORM\Entity(repositoryClass="App\Repository\ArticlesRepository")
 * @Vich\Uploadable
 */
class Articles


// Près de la propriété $featured_image
/**
 * @ORM\Column(type="string", length=255)
 * @var string
 */
private $featured_image;

/**
 * @Vich\UploadableField(mapping="featured_images", fileNameProperty="featured_image")
 * @var File
 */
private $imageFile;


// Dans les Getters/setters
public function setImageFile(File $image = null)
{
    $this->imageFile = $image;

    if ($image) {
        $this->updated_at = new \DateTime('now');
    }
}

public function getImageFile()
{
    return $this->imageFile;
}

public function getFeaturedImage()
{
    return $this->featured_image;
}

public function setFeaturedImage($featured_image)
{
    $this->featured_image = $featured_image;

    return $this;
}

Voilà, le terrain est prêt pour créer l'interface d'administration.

L'interface d'administration

Voir cette partie en vidéo

Installer Easy Admin

Nous allons maintenant passer à l'installation d'Easy Admin afin de mettre en place l'interface d'administration du site.

Comme pour les bundles précédents, nous allons utiliser composer

composer require admin

Configurer Easy Admin

Une fois installé, la configuration d'Easy Admin se déroule dans le fichier "config/packages/easy_admin.yaml".

Nous allons pouvoir définir de nombreuses propriétés générales ainsi que pour chacune de nos entités.

Les propriétés générales

Quelques propriétés nous permettent de définir le titre de l'administration, l'affichage de l'utilisateur, les menus situés à gauche, entre autres, très nombreuses. L'exemple ci-dessous en définit certaines.

easy_admin:
    # On définit le nom de l'interface d'administration
    site_name: 'Gestion de mon blog'
    # On définit l'affichage de l'utilisateur
    user:
        display_name: true
        display_avatar: false
    design:
        # Ces lignes sont utiles pour CKEditor
        form_theme:
            - "@EasyAdmin/form/bootstrap_4.html.twig"
            - "@FOSCKEditor/Form/ckeditor_widget.html.twig"
        # Ces lignes définiront notre menu
        menu:
            - { label: 'Articles' }
            - { entity: 'Articles', label: 'Articles', icon: 'book' }
            - { entity: 'Categories', label: 'Catégories', icon: 'tag' }
            - { entity: 'MotsCles', label: 'Mots Clés', icon: 'tag' }
            - { label: 'Utilisateurs' }
            - { entity: 'Users', label: 'Utilisateurs', icon: 'user' }
    formats:
        # Ici on définit le format des dates
        datetime: 'd/m/Y à H:i'

Les entités

Pour chacune des entités, nous pourrons définir quelles informations s'affichent dans la liste, lesquelles s'affichent dans le formulaire d'ajout, entre autres.

L'exemple ci-dessous correspond à la configuration de l'entité "Articles"

    entities:
        Articles:
            # Correspond au fichier Articles.php
            class: App\Entity\Articles
            # On définit ci-dessous le contenu de la liste qui affichera les articles et les critères de tri
            list:
                fields:
                    - id
                    - titre
                    # Le champ ci-dessous affichera l'image de l'article
                    - { property: 'featured_image', label: 'Image', type: 'image', base_path: '%app.path.featured_images%' }
                    - { property: 'created_at', label: 'Créé' }
                    # Les catégories et les mots-clé sont listés ci-dessous
                    - { property: 'categories', label: 'Catégories', type: 'array'}
                    - { property: 'motsCles', label: 'Mots-Clés', type: 'array'}
                sort: ['created_at', 'desc']
            # On définit ci-dessous le contenu du formulaire d'ajout ou modification d'article
            form:
                fields:
                    - titre
                    # Affichage de l'éditeur Wysiwyg
                    - { property: 'contenu', type: 'fos_ckeditor', type_options: { config_name: 'main_config' }}
                    # Affichage du champ d'ajout d'image
                    - { property: 'imageFile', type: 'vich_image', label: 'Image' }
                    - users
                    # Les catégories et mots-clés peuvent s'afficher avec une sélection multiple
                    - { property: 'categories', label: 'Catégories', type: 'entity', type_options: { class: 'App\Entity\Categories', multiple: true,by_reference: false, attr: { data-widget: 'select2' }}}
                    - { property: 'motsCles', label: 'Mots Clés', type: 'entity', type_options: { class: 'App\Entity\MotsCles', multiple: true,by_reference: false, attr: { data-widget: 'select2' }}}

Les autres entités pourront être affichées de la même façon.

Pour l'entité Users, nous allons également pouvoir modifier le rôle de l'utilisateur.

La configuration de cette entité sera donc la suivante (avec rôles user et admin)

Users:
    class: App\Entity\Users
    label: 'Utilisateurs'
    list:
        fields:
            - id
            - email
            - { property: 'roles', label: 'Rôles', type: json_array}
    form:
        fields:
            - email
            - { property: 'roles', label: 'Rôles', type: choice, type_options: {expanded: true, multiple: true, choices: {'Utilisateur':'ROLE_USER', 'Administrateur':'ROLE_ADMIN'}}}

Gérer les relations

Dans le cas d'entités avec relations, comme par exemple les entités "Articles" et "Categories", il est nécessaire de définir quelle valeur sera affichée pour les catégories lors de l'ajout ou la modification d'un article.

Nous allons afficher le nom de la catégorie, option la plus logique.

Afin de permettre cet affichage, il sera nécessaire d'implémenter la méthode magique "__toString" dans les entités qui le nécessitent, "Categories" dans cet exemple.

Nous ajouterons donc cette méthode comme ci-dessous

public function __toString()
{
    return $this->nom;
}

Protéger notre administration

Voir cette partie en vidéo

L'interface d'administration ne doit pas être accessible par tous les utilisateurs.

Afin de la protéger, nous allons demander l'authentification des utilisateurs avant de pouvoir y accéder, et vérifier qu'ils sont administrateurs.

Pour ce faire, rendez-vous à la fin de "config/packages/security.yaml" et retirez le # devant la ligne ci-dessous

- { path: ^/admin, roles: ROLE_ADMIN }

C'est tout, merci de votre fidélité.

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder aux forums de Nouvelle-Techno.fr ou au serveur Discord pour une entraide par chat

Visualisez les fichiers de cette série sur GitHub

Partager

Partager sur Facebook Partager sur Twitter Partager sur LinkedIn

Commentaires

Ecrire un commentaire

oha94 a écrit le 2 avril 2020 à 14:38

Bonjjour ,,

merci pour ce tuto qui m'aide vraiment a comprendre symfony mais lors de l'insatllation de "easy admin" j'ai l'erreur suivannt:

 Installation failed, reverting ./composer.json to its original content.

issu du traitement suivanr:

 

 

PS C:\wamp64\www\projets\travaux\projetakebo2> composer require admin
Using version ^2.3 for easycorp/easyadmin-bundle
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Restricting packages listed in "symfony/symfony" to "4.4.*"
Nothing to install or update
Package zendframework/zend-code is abandoned, you should avoid using it. Use laminas/laminas-code instead.
Package zendframework/zend-eventmanager is abandoned, you should avoid using it. Use laminas/laminas-eventmanager instead.
Generating autoload files
59 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
ocramius/package-versions:  Generating version class...
ocramius/package-versions: ...done generating version class
Executing script cache:clear [KO]
 [KO]
Script cache:clear returned with error code 1
!!
!!  In FileLoader.php line 180:
!!

!!    The file "C:\wamp64\www\projets\travaux\projetakebo2\config/packages/fos_ckeditor.yaml" does not contain valid YAML: "Malformed inline YAML string: "{ name: "s
!!    tyles", items: ['Bold', 'Italic', 'Underline', 'Strike', 'Blockquote', '-',

!!     'Link', '-', 'RemoveFormat', '-', 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent',

!!      '-', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'Image', 'Table',

!!       '-', 'Styles', 'Format','Font','FontSize', '-', 'TextColor', 'BGColor', 'Source'] }" at line 20 (near "   '-', 'Styles', 'Format','Font','FontSize', '-', 'T
!!    extColor', 'BGColor', 'Source'] }")." in C:\wamp64\www\projets\travaux\projetakebo2\config/packages/fos_ckeditor.yaml (which is loaded in resource "C:\wamp64\w
!!    ww\projets\travaux\projetakebo2\config/packages/fos_ckeditor.yaml").

!!

!!
!!  In YamlFileLoader.php line 693:
!!

!!    The file "C:\wamp64\www\projets\travaux\projetakebo2\config/packages/fos_ckeditor.yaml" does not contain valid YAML: "Malformed inline YAML string: "{ name: "s
!!    tyles", items: ['Bold', 'Italic', 'Underline', 'Strike', 'Blockquote', '-',

!!     'Link', '-', 'RemoveFormat', '-', 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent',

!!      '-', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'Image', 'Table',

!!       '-', 'Styles', 'Format','Font','FontSize', '-', 'TextColor', 'BGColor', 'Source'] }" at line 20 (near "   '-', 'Styles', 'Format','Font','FontSize', '-', 'T
!!    extColor', 'BGColor', 'Source'] }").".

!!

!!
!!  In Inline.php line 300:
!!

!!    Malformed inline YAML string: "{ name: "styles", items: ['Bold', 'Italic', 'Underline', 'Strike', 'Blockquote', '-',

!!     'Link', '-', 'RemoveFormat', '-', 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent',

!!      '-', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'Image', 'Table',

!!       '-', 'Styles', 'Format','Font','FontSize', '-', 'TextColor', 'BGColor', 'Source'] }" at line 20 (near "   '-', 'Styles', 'Format','Font','FontSize', '-', 'T
!!    extColor', 'BGColor', 'Source'] }").

!!

!!
!!
Script @auto-scripts was called via post-update-cmd

Installation failed, reverting ./composer.json to its original content.

 

 

merci de m'aider

 

 

Répondre

vic101 a écrit le 24 mars 2020 à 14:24

Bonjour,

Merci pour ce tuto qui m'aide à voir l'ensemble des possibilités d'easyadmin.

J'ai vu que pour la création d'un article, vous avez mis les users dans un ChoiceType. Hors j'aimerais récupérer seulement l'utilisateur connecté (qui est donc l'auteur) pour pouvoir persister mon article en base de données sans forcément l'afficher dans le form (pas nécessaire pour l'utilisateur final).

Comment dois-je m'y prendre ?

Merci

Répondre

auredchr a écrit le 11 mars 2020 à 17:23

Bonjour, 

J'ai une question sur le fichier easy_admin.yaml.

Est-il possible d'intégrer la base.html.twig dans l'espace admin afin de conserver la navbar ? 

Merci d'avance, 

Répondre

renaudham a écrit le 27 février 2020 à 18:09

Bonjour.

Intéressant, je cherchais des solutions pour protéger EasyAdmin

Sans cherche un ACL je serai quand même intéressé par une solution multi role,

que je puisse définir au moins dans le code différents acces pour différents roles,

genre un super admin, puis des gens que sur une gestion contenu blog, d'autres pour d'autres types d'entitées..

De ce que je comprends, en cumulant ce que tu ecris sous

La configuration de cette entité sera donc la suivante (avec rôles user et admin)

plus des gestions de paths, je supposes que ça devrait être possible.

- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/url_mon_entite, roles: ROLE_XXXX }

etc..

As tu essayé, et peut tu confirmer ?

 

Merci

 

 

 

Répondre

KamiDev a écrit le 25 février 2020 à 08:14

Bonjour nouvelle Techno. Je vous remercie beaucoup pour votre tuto et tous les autres car grace a vous j'apprends beaucoup cependant j'aimerais savoir s'il est possible avec un easyadmin d'avoir de plusieurs interface admin, si pourriez vous m'orientez. De plus j'ai suivi votre tuto mais j'ai un leger problème avec ckeditor qu'i ne s'affiche pas comme souhaité

Répondre

Nouvelle-Techno.fr a répondu le 25 février 2020 à 08:49

Bonjour,

Merci beaucoup. Je ne pense pas qu'il soit possible de gérer plusieurs interfaces d'administration.

Pour ce qui est de ckeditor, quel est le problème ?

Pour une aide plus simple, Discord est également disponible https://discord.gg/azQ9sbD

Répondre

KamiDev a répondu le 26 février 2020 à 17:26

# Read the documentation: https://symfony.com/doc/current/bundles/FOSCKEditorBundle/index.html

twig:
    form_themes:
        - '@FOSCKEditor/Form/ckeditor_widget.html.twig'

fos_ck_editor:
    configs:
        main_config:
            toolbar:
                - { name: "styles", items: ['Bold', 'Italic', 'Underline', 'Strike', 'Blockquote', '-', 'Link', '-', 'RemoveFormat', '-', 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'Image', 'Table', '-', 'Styles', 'Format','Font','FontSize', '-', 'TextColor', 'BGColor', 'Source'] }
    base_path: "build/ckeditor"
    js_path:   "build/ckeditor/ckeditor.js"  

//////////////////////////////////////////////////////////////////////////////////////////////// 
easy_admin:
    entities:
        Articles:
            # Correspond au fichier Articles.php
            class: App\Entity\Articles
            # On définit ci-dessous le contenu de la liste qui affichera les articles et les critères de tri
            list:
                fields:
                    - id
                    - { property: 'title', label: 'Titre'}
                    # Le champ ci-dessous affichera l'image de l'article
                    - { property: 'featuredImage', label: 'Image', type: 'image', base_path: '%app.path.featured%' }
                    - { property: 'createdAt', label: 'Créé' }
                    # Les catégories et les mots-clé sont listés ci-dessous
                    - { property: 'categories', label: 'Catégories', type: 'array'}
                    - { property: 'keywords', label: 'Mots-Clés', type: 'array'}
                    - { property: 'usersBlog', label: 'Auteur', type: 'entity'}
                sort: ['createdAt', 'desc']
            # On définit ci-dessous le contenu du formulaire d'ajout ou modification d'article
            form:
                fields:
                    - title
                    # Affichage de l'éditeur Wysiwyg
                    - { property: 'contenu', type: 'fos_ckeditor', type_options: { config_name: 'main_config' }}
                    # Affichage du champ d'ajout d'image
                    - { property: 'imageFile', type: 'vich_image', label: 'Image' }
                    - { property: 'usersBlog', label: 'Utilisateurs', type: 'entity', type_options: { class: 'App\Entity\UsersBlog' }} 
                    # Les catégories et mots-clés peuvent s'afficher avec une sélection multiple
                    - { property: 'categories', label: 'Catégories', type: 'entity', type_options: { class: 'App\Entity\Categories', multiple: true,by_reference: false, attr: { data-widget: 'select2' }}}
                    - { property: 'keywords', label: 'Mots Clés', type: 'entity', type_options: { class: 'App\Entity\keyword', multiple: true,by_reference: false, attr: { data-widget: 'select2' }}}

// Voici mes configs ca reste en texte area ca ne s'affiche pas en editeur wiziwig         

 

Répondre

tonius a écrit le 21 février 2020 à 00:08

Merci pour le travail que vous faites. Vous ne pouvez pas savoir comment que ça aide.

Pour info je suis sur symfony 5 j'ai eu des problèmes lors de l'installation du bundle

stof/doctrine-extensions-bundle

Soit disant d'après mes recherches qu'il ne serait plus maintenu. Mais un bénévole a crée un fork en bifurquant la bibliothèque de stof mais réparant les versions ce coup-ci pour l'instant ça fonctionne très bien juste à remplacer stof par antishov

antishov/doctrine-extensions-bundle

Répondre

Nouvelle-Techno.fr a répondu le 25 février 2020 à 08:47

Bonjour,

Merci pour l'information

Répondre

Steeve a écrit le 10 février 2020 à 17:41

Bonjour, 

Deja merci pour le travail que vous faite ça en aide plus d'un je pense ^^. Par contre je rencontre une erreur lors de la configuration d'EasyAdmin 

 

The "Article" entity included in the "menu" option is not managed by EasyAdmin. The menu can only include any of these entities: Articles.

 

J'ai mon entity Article sans "S", après avoir renommé tout le code en fonction de mes paramètres j'ai cette erreur qui s'affiche, avez vous une idée d'ou cela pourrait venir ?

Cordialement 

Répondre

Nouvelle-Techno.fr a répondu le 10 février 2020 à 17:50

Bonsoir,

L'entité "Article" doit être déclarée dans la partie "entities" du fichier "easy_admin.yaml", et également dans la partie "menu" avec la même orthographe.

Il faut aussi vérifier que le fichier de l'entité s'appelle "Article.php" et la classe à lintérieur "Article".

Répondre

Steeve a répondu le 10 février 2020 à 20:27

C'est une erreur de ma part, après vérification j'avais oublié un "s" sur un article ^^ . En tout cas merci pour la rapidité de la réponse.

Bonne continuation 

Cordialement 

Répondre

Steeve a répondu le 10 février 2020 à 23:41

J'ai encore un problème, lors de la création d'article cela me renvoie une erreur .

Expected argument of type "App\Entity\Category or null", "instance of Doctrine\Common\Collections\ArrayCollection" given at property path "category".

Mon entitée Category :

<?php

 

namespace App\Entity;

 

use Doctrine\Common\Collections\ArrayCollection;

use Doctrine\Common\Collections\Collection;

use Doctrine\ORM\Mapping as ORM;

 

/**

 * @ORM\Entity(repositoryClass="App\Repository\CategoryRepository")

 */

class Category

{

    /**

     * @ORM\Id()

     * @ORM\GeneratedValue()

     * @ORM\Column(type="integer")

     */

    private $id;

 

    /**

     * @ORM\Column(type="string", length=255)

     */

    private $title;

 

    /**

     * @ORM\OneToMany(targetEntity="App\Entity\Article", mappedBy="category")

     */

    private $articles;

 

    public function __construct()

    {

        $this->articles = new ArrayCollection();

    }

 

    public function __toString()

    {

        return $this->title;

    }


 

    public function getId(): ?int

    {

        return $this->id;

    }

 

    public function getTitle(): ?string

    {

        return $this->title;

    }

 

    public function setTitle(string $title): self

    {

        $this->title = $title;

 

        return $this;

    }

 

    /**

     * @return Collection|Article[]

     */

    public function getArticles(): Collection

    {

        return $this->articles;

    }

 

    public function addArticle(Article $article): self

    {

        if (!$this->articles->contains($article)) {

            $this->articles[] = $article;

            $article->setCategory($this);

        }

 

        return $this;

    }

 

    public function removeArticle(Article $article): self

    {

        if ($this->articles->contains($article)) {

            $this->articles->removeElement($article);

            // set the owning side to null (unless already changed)

            if ($article->getCategory() === $this) {

                $article->setCategory(null);

            }

        }

 

        return $this;

    }

}

 

J'ai beau chercher je ne trouve pas de solution . (je précise que je suis débutant dans le domaine )

Cordialement 

Répondre

Nouvelle-Techno.fr a répondu le 11 février 2020 à 11:23

Bonjour,

Que contient "easy_admin.yaml" ?

Il serait peut-être plus simple de discuter sur Discord (https://discord.gg/azQ9sbD)

Répondre

JoSym a écrit le 3 février 2020 à 17:56

Bonjour, après l'ajout de tout le code dans le easy_admin.yaml j'ai cette erreur:

Warning: Invalid argument supplied for foreach().

Impossible de trouver la solution.

 

Merci d'avance !

Répondre

Refined a écrit le 29 janvier 2020 à 08:00

Bonjour, je travaille avec symfony5. J'utilise easyAdminBundle pour la partie backend. EasyAdmin fourni un éditeur de texte, mais celui-ci ne me convenait pas. C'est pourquoi j'utilise CKEditorBundle. Cependant, je n'arrive pas à uploder les images. Pour insérer une image, il faut que l'image soit déjà uploadé... j'ai essayé elfinderBundle mais j'ai des tonnes d'erreurs lors de l'installation de ce bundle, qui est pourtant censé fonctionné avec SF5... Pourriez-vous me fournir des conseils précieux SVP. Merci pour votre réponse.

Répondre

Nouvelle-Techno.fr a répondu le 29 janvier 2020 à 08:47

Bonjour,

Il y a effectivement de nombreuses erreurs dans les bundles sur Symfony 5, raison pour laquelle je reste pour le moment en version 4 le temps qu'elle se stabilise, je n'ai malheureusement pas de solution pour le moment.

Répondre

Refined a répondu le 29 janvier 2020 à 15:27

Ok, merci. Dans le futur, je ferai comme vous. J'attendrai un moment avant de passer à la version ultérieure.

Répondre

iSHOCK a écrit le 14 décembre 2019 à 14:11

Bonjour, Merci pour ce tuto !

j'ai également 2 petits soucis; le 1er avec le ROLE_ADMIN, quand je l'active, je n'ai plus accès a l'espace ADMIN, ACCES DENIED .

De plus , quand je suis dans l'espace ADMIN et que je désire écrire un articles j'ai un message d'erreur :

An exception occurred while executing 'INSERT INTO articles (titre, slug, contenu, created_at, updated_at, featured_image, users_id) VALUES (?, ?, ?, ?, ?, ?, ?)' with params ["x xc", "x-xc", "<p>&nbsp; xxc<\/p>", "2019-12-14 14:07:51", "2019-12-14 14:07:51", null, 1]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'featured_image' cannot be null

 

 

Cordialement

Répondre

Nouvelle-Techno.fr a répondu le 14 décembre 2019 à 15:45

Bonjour,

Pour le rôle admin, as-tu vérifié ce que tu as dans "roles" dans la base de données ?

Pour l'erreur, il dit que la colonne featured_image est vide, as-tu mis une image ?

Merci

Répondre

Ecrire un commentaire