Doctrine met of zonder Symfony

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Frank Nietbelangrijk

Frank Nietbelangrijk

16/09/2013 11:36:28
Quote Anchor link
Ik zou graag de Entities die ik in het Symfony framework heb gemaakt mee willen nemen naar een niet-symfony project.

Daartoe ben ik naar de Doctrine ORM website gegaan en heb de 'Getting Started with DoctrineGetting Started with Doctrine' tutorial met succes doorlopen.

Echter gebruikt deze tutorial een andere metadata schrijfwijze dan in Symfony.

Symfony:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
/**
 * Client
 *
 * @ORM\Table(name="clients")
 */

class Client
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */

    private $id;
?>


Doctrine ORM tutorial:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
/**
 * @Entity @Table(name="clients")
 */

class Client
{
    /** @Id @Column(type="integer") @GeneratedValue **/
    private $id;
?>


Mijn vraag is hoe kan ik de standalone Doctrine zo configureren dat de symfony entities er in werken?

Dit is de bootstrap.php uit de tutorial:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// bootstrap.php
require_once "vendor/autoload.php";

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

$paths = array(__DIR__ . "/src");
$isDevMode = false;

// the connection configuration
$dbParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'root',
    'password' => '',
    'dbname'   => 'doctrine',
);


$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);
?>
Gewijzigd op 16/09/2013 11:37:35 door Frank Nietbelangrijk
 
PHP hulp

PHP hulp

18/04/2024 15:36:22
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/09/2013 16:54:06
Quote Anchor link
-Schop-
 
Koen Vlaswinkel

Koen Vlaswinkel

17/09/2013 17:11:51
Quote Anchor link
Als het goed is werkt het als je dit erboven zet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
use Doctrine\ORM\Mapping as ORM;


Zo niet, dan moet je dit even door lezen.
 
Wouter J

Wouter J

17/09/2013 17:26:16
Quote Anchor link
Inderdaad wat Koen zegt. Annotations (die @ dingen) zijn gewoon klassen die je kunt vinden in de Doctrine\ORM\Mapping namespace. In Symfony moet je deze namespace importen en aliasen (aliasen hoeft niet), in Doctrine wordt dit al gedaan. Dat betekend uiteraard niet dat je het niet mag doen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/09/2013 19:59:51
Quote Anchor link
Koen en Wouter als eerste bedankt voor de reacties.

de oplossing van Koen werkt helaas niet. wat ik heb uitgevogeld is dat de entity volledig overgeslagen wordt (dus niet als entity gezien wordt) tot ik het woordje @Entity aan de Annotations boven de class toevoeg. Dan wordt de class wel als entity gezien maar dan krijg ik direct een foutmelding:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
[Doctrine\ORM\Mapping\MappingException]
No identifier/primary key specified for Entity "Client". Every Entity must
have an identifier/primary key.


Wouter: mag ik de Doctrine\ORM\Mapping namespace zien als een mappenstructuur?
Gewijzigd op 18/09/2013 18:30:12 door Frank Nietbelangrijk
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/09/2013 20:36:16
Quote Anchor link
-* bump *-
 
Wouter J

Wouter J

18/09/2013 23:14:43
Quote Anchor link
>> Wouter: mag ik de Doctrine\ORM\Mapping namespace zien als een mappenstructuur?
Ja en nee. Namespaces is een manier ok code te organiseren en om een scope te creëren. De autoloaders, functies die klassen laden, maken echter ook gebruik van deze namespace om de directory te vinden.

Voor je andere vraag moet ik eerst zelf even een test projectje starten, dat kan ik op z'n vroegst zondag doen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/09/2013 23:45:00
Quote Anchor link
Okee,

Op zich er is er geen haast bij. Ik kan ook mijn tutorial projectje toesturen als je daar baat bij hebt?
 
Koen Vlaswinkel

Koen Vlaswinkel

19/09/2013 20:11:17
Quote Anchor link
Ik heb even een testprojectje opgezet en je moet blijkbaar je bootstrap.php veranderen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// bootstrap.php
require_once "vendor/autoload.php";

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

$paths = array(__DIR__ . "/src");
$isDevMode = false;

// the connection configuration
$dbParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'root',
    'password' => '',
    'dbname'   => 'doctrine',
);


// verander dit om niet de simpleAnnotationReader te gebruiken:
// dit zijn de defaults:
// createAnnotationMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null, $useSimpleAnnotationReader = true)

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, null, null, false);
$entityManager = EntityManager::create($dbParams, $config);
?>
Gewijzigd op 19/09/2013 20:11:37 door Koen Vlaswinkel
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/09/2013 20:35:21
Quote Anchor link
Hey Koen,

Ik ben er mee gaan worstelen. En wat denk je? je verdient een grote

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
      **    **    **
      ||    ||    ||
      ||    ||    ||
  ---------------------
  |~~~~~~~~~~~~~~~~~~~|
  ---------------------
  |                   |
  |     T A A R T     |
  |                   |
  =====================


Bedankt!

Dit is hem uiteindelijk geworden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, NULL, NULL, false); ?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.