Doctrine met of zonder Symfony
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)
Doctrine ORM tutorial:
Code (php)
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
?>
// 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
-Schop-
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.
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)
1
2
3
2
3
[Doctrine\ORM\Mapping\MappingException]
No identifier/primary key specified for Entity "Client". Every Entity must
have an identifier/primary key.
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
-* bump *-
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.
Op zich er is er geen haast bij. Ik kan ook mijn tutorial projectje toesturen als je daar baat bij hebt?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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);
?>
// 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
Ik ben er mee gaan worstelen. En wat denk je? je verdient een grote
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
** ** **
|| || ||
|| || ||
---------------------
|~~~~~~~~~~~~~~~~~~~|
---------------------
| |
| T A A R T |
| |
=====================
|| || ||
|| || ||
---------------------
|~~~~~~~~~~~~~~~~~~~|
---------------------
| |
| T A A R T |
| |
=====================
Bedankt!
Dit is hem uiteindelijk geworden: