Hoi medetweakers,
Zit nu een tijdje vast op de integratie tussen CodeIgniter & Doctrine.
Zover ben ik:
- in libraries heb ik Doctrine.php gemikt, alsmede de gehele folder daarvan.
- commandline versie van doctrine doet wat 'ie moet doen.
- Doctrine toegevoegd aan autoload array van libraries
Huidige directory structuur:
application
- models
- entity
- Proxy
- Repositories
in entity de gegenereerde klasses met getters & setters, zonder annotaties
in Proxy de classes met annotaties
in Repositorys de repository klasses per entity (of proxy, is hoe je het bekijkt)
Vervolgens de volgende paginas gevonden:
Doctrine Project CodeIgniter pagina
CodeIgniter forum
En nog vele github links die ik achterwege laat. (Veelal hetzelfde als de Doctrine link)
Mijn huidige Doctrine.php in de libraries folder:
En mijn simpele controller:
En allicht nog handig; het relevante deel van de Page klasse (in models/entity/Page.php)
En. Het. Doet. Compleet. Niets.
Zien jullie de fout?
De regel
Overigens, tot nu toe heb ik al mijn tests gedaan zowel met die regel als met mijn versie van die regel.
Nog ideeen op de vrijdag avond?
Zit nu een tijdje vast op de integratie tussen CodeIgniter & Doctrine.
Zover ben ik:
- in libraries heb ik Doctrine.php gemikt, alsmede de gehele folder daarvan.
- commandline versie van doctrine doet wat 'ie moet doen.
- Doctrine toegevoegd aan autoload array van libraries
Huidige directory structuur:
application
- models
- entity
- Proxy
- Repositories
in entity de gegenereerde klasses met getters & setters, zonder annotaties
in Proxy de classes met annotaties
in Repositorys de repository klasses per entity (of proxy, is hoe je het bekijkt)
Vervolgens de volgende paginas gevonden:
Doctrine Project CodeIgniter pagina
CodeIgniter forum
En nog vele github links die ik achterwege laat. (Veelal hetzelfde als de Doctrine link)
Mijn huidige Doctrine.php in de libraries folder:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
| <?php use Doctrine\Common\ClassLoader, Doctrine\ORM\Configuration, Doctrine\ORM\EntityManager, Doctrine\Common\Cache\ArrayCache, Doctrine\DBAL\Logging\EchoSQLLogger; define('DEBUGGING', FALSE); class Doctrine { public $em = null; public function __construct() { // load database configuration and custom config from CodeIgniter require APPPATH . 'config/database.php'; // Set up class loading. require_once APPPATH . 'libraries/Doctrine/Common/ClassLoader.php'; $doctrineClassLoader = new \Doctrine\Common\ClassLoader('Doctrine', APPPATH . 'libraries'); $doctrineClassLoader->register(); $entitiesClassLoader = new \Doctrine\Common\ClassLoader('models', APPPATH . 'models/entity'); $entitiesClassLoader->register(); $proxiesClassLoader = new \Doctrine\Common\ClassLoader('Proxies', APPPATH . 'models/Proxies'); $proxiesClassLoader->register(); $symfonyClassLoader = new \Doctrine\Common\ClassLoader('Symfony', APPPATH . 'libraries/Doctrine'); $symfonyClassLoader->register(); // Choose caching method based on application mode if (ENVIRONMENT == 'production') { $cache = new \Doctrine\Common\Cache\ApcCache; } else { $cache = new \Doctrine\Common\Cache\ArrayCache; } // Set some configuration options $config = new Configuration; // Metadata driver $driverImpl = $config->newDefaultAnnotationDriver(array(APPPATH . 'models/entity')); $config->setMetadataDriverImpl($driverImpl); // Caching $config->setMetadataCacheImpl($cache); $config->setQueryCacheImpl($cache); // Proxies $config->setProxyDir(APPPATH . 'models/Proxies'); $config->setProxyNamespace('Proxies'); if (ENVIRONMENT == 'development') { $config->setAutoGenerateProxyClasses(TRUE); } else { $config->setAutoGenerateProxyClasses(FALSE); } // SQL query logger if (DEBUGGING) { $logger = new \Doctrine\DBAL\Logging\EchoSQLLogger; $config->setSQLLogger($logger); } // Database connection information $connectionOptions = array( 'driver' => 'pdo_mysql', 'user' => $db['default']['username'], 'password' => $db['default']['password'], 'host' => $db['default']['hostname'], 'dbname' => $db['default']['database'], 'charset' => $db['default']['char_set'], 'driverOptions' => array( 'charset' => $db['default']['char_set'] ) ); // Create EntityManager $this->em = EntityManager::create($connectionOptions, $config); } } |
En mijn simpele controller:
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
25
26
27
28
29
30
| <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); use entity\Page; class Homepage extends MY_Controller { public function index() { $data['content'] = 'Homepage/index'; $data['pageinfo'] = $this->setPageInfo(); $x = new Page(); $x->setTitle("test"); $x->setKeywords("a, bee, cee, dee"); $x->setDescription("test"); $x->setAuthor("test"); $x->setInMenu(1); $x->setParent(0); $x->setLink("/"); $x->setDeleted(0); $this->em->persist($x); $this->em->flush(); echo 'saved'; $this->renderView($data); } } |
En allicht nog handig; het relevante deel van de Page klasse (in models/entity/Page.php)
PHP:
1
2
3
4
5
6
7
8
9
10
11
| <?php namespace Proxies; use \Doctrine\Common\Collections\ArrayCollection; /** * @Entity(repositoryClass="Repositories\PageRepository") * @Table(name="PAGE") */ class Page |
En. Het. Doet. Compleet. Niets.
Zien jullie de fout?
De regel
PHP:
in de codeigniter link verschilt met mijn huidige config, ik zie alleen niet in waarom dit zou werken. 1
| $entitiesClassLoader = new ClassLoader('models', rtrim(APPPATH, "/" )); |
Overigens, tot nu toe heb ik al mijn tests gedaan zowel met die regel als met mijn versie van die regel.
Nog ideeen op de vrijdag avond?