8768 sujets

Développement web côté serveur, CMS

Bonjour, je devais faire un CRUD pour le projet 4 de ma formation, et vu avec mon mentor, j'ai décidé de mettre en place Doctrine ORM ( Vu que de toute façon mon projet 5 est avec Symfony, c'est toujours bon de savoir comment faire).

Le petit soucis c'est que pour trouver de l'aide avec Doctrine (sans que google me balance du Symfony), c'est un peu compliqué.

Du coup j'ai 2 petites questions mais avant je partage la structure rapidement

<?php
# cli-config.php

$entityManager = require_once join(DIRECTORY_SEPARATOR, [__DIR__, 'bootstrap.php']);

use Doctrine\ORM\Tools\Console\ConsoleRunner;

return ConsoleRunner::createHelperSet($entityManager);


<?php
# bootstrap.php

require_once join(DIRECTORY_SEPARATOR, [__DIR__, '../vendor/autoload.php']);

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

$entitiesPath = [
    join(DIRECTORY_SEPARATOR, [__DIR__, "../src/Entity"])
];

$isDevMode = true;
$proxyDir = null;
$cache = null;
$useSimpleAnnotationReader = false;

// Connexion à la base de données
$dbParams = [
    'driver'   => 'pdo_mysql',
    'host'     => 'localhost',
    'port'     => '3308',
    'charset'  => 'utf8',
    'user'     => 'root',
    'password' => '',
    'dbname'   => 'blog_mvc',
];

$config = Setup::createAnnotationMetadataConfiguration(
    $entitiesPath,
    $isDevMode,
    $proxyDir,
    $cache,
    $useSimpleAnnotationReader
);
$entityManager = EntityManager::create($dbParams, $config);

return $entityManager;


<?php
#FrontController.php

namespace App\controller;

use App\Entity\Article;

$entityManager = require_once join(DIRECTORY_SEPARATOR, [__DIR__, '../../config/bootstrap.php']);

class FrontController
{

    public function getArticle($articleId)
    {
        $userRepo = $entityManager->getRepository(Article::class);
    }

}


Dans mon FrontController.php, je voulais faire une fonction pour la récupération des articles (j'ai pas mis le routeur qui ce trouve entre, juste de la redirection), seulement mon problème vient de ma variable $entityManager, je ne sais pas vraiment comment procéder pour m'en servir dans ma fonction, tel que vous voyez le code, cela ne fonctionne pas. si quelqu'un à au moins un petit indice Smiley smile

et mon deuxième problème viens pour la récupération des dates, en faisant un CRUD sans Doctrine, j'avais réussi essaiment avec DATE_FORMAT.. mais la il me dit qu'il ne peux pas me renvoyer un string, j'ai mis ça comme annotation à ma variable concernant la date :

 @ORM\Column(type="datetime_immutable", options={"default"="CURRENT_TIMESTAMP"})
Salut !

Tu pourrais initialiser ta variable dans le constructeur de ton FrontController, et ensuite y acceder depuis la variable de classe comme ça :


class FrontController {
    private $entityManager;

    function __construct () {
        $this->entityManager = require_once join(
            DIRECTORY_SEPARATOR, 
            [__DIR__,'../../config/bootstrap.php']
        );
    }

    public function getArticle ($articleId) {
        $userRepo = $this->entityManager->getRepository(Article::class);
    }
}


De cette manière, ton entityManager sera accessible depuis toutes les fonctions contenues dans ton FrontController !
Modifié par Wazazaby (19 Apr 2020 - 15:16)
Wazazaby a écrit :
Salut !

Tu pourrais initialiser ta variable dans le constructeur de ton FrontController, et ensuite y acceder depuis la variable de classe comme ça :


class FrontController {
    private $entityManager;

    function __construct () {
        $this-&gt;entityManager = require_once join(
            DIRECTORY_SEPARATOR, 
            [__DIR__,'../../config/bootstrap.php']
        );
    }

    public function getArticle ($articleId) {
        $userRepo = $this-&gt;entityManager-&gt;getRepository(Article::class);
    }
}


De cette manière, ton entityManager sera accessible depuis toutes les fonctions contenues dans ton FrontController !


Merci beaucoup, c'est parfait, je suis pas encore super à l'aise avec le PHP, j'aurais du y penser ! En tout cas merci encore d'avoir pris le temps de me répondre Smiley smile