Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Symfony2
Symfony2 Forum d'entraide sur le framework PHP Symfony2.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2011, 11h36   #21
Membre éprouvé
 
Cédric L.
Inscription : février 2009
Messages : 315
Détails du profil
Informations personnelles :
Nom : Cédric L.
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 315
Points : 436
Points : 436
Precision pour la PR6:

- Le renseignement des bundles dans la ligne de commande ne fonctionne plus avec "Application\UserBundle". Ca fonctionne avec "UserBundle" tout court! Curieux.

- il faut preciser le bundle pour la generation des entités depuis la PR6.

Code :
php app/console doctrine:generate:entities "UserBundle"
- J'ai remarqué aussi que le "doctrine:mapping:import" deconne... mais genere tout de meme le mapping. C'est quand on ne precise pas l'Entity manager.
RapotOR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 16h55   #22
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je relance le débat...

Avec la PR6, ça ne marche plus.

J'ai créé un bundle. Créé un dossier entity. Rentré une classe a générer.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
/*
* @Entity
*/
class Personne
{
 
  /**
   * @orm:Id
   * @orm:Column(type="integer")
   * @orm:GeneratedValue(strategy="IDENTITY")
   */
  protected $id;
  /**
   * @orm:Column(type="string", length="255")
   */
  protected $nom;
}
Je sais que la base est bien connectée et définie vu que le drop et la création marchent.

Il reste a générer ... donc
Code :
app/console doctrine:generate:entities "GeneralBundle"
déjà il est mainentant obligatoire de le faire avec un nom de Bundle. Et entre " si non, il ne sait même pas que le nom est sur la ligne de commande. Soit.

Sauf que la j'ai systématiquement un
Citation:
Bundle GeneralBundle does not contain any mapped entities.
qui m'arrive directement dans les dents.

Le fichier config a été modifié :
Code :
1
2
3
4
5
6
7
8
9
 
doctrine.dbal:
    dbname:   s2test2
    user:     root
    password: ~
doctrine.orm:
    auto_generate_proxy_classes: %kernel.debug%
    mappings:
      GeneralBundle: { type: annotation, dir: Entity/ }
la petite astuce dans le configuration du bundle a été trouvé dans un news groupe en espagnol (c'est loi les cours du lycée) mais je pense que ce sont les paramètres par défauts et qu'ils y soient où pas ne change rien.

Quelqu'un aurait une idée ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 08h06   #23
Membre éprouvé
 
Cédric L.
Inscription : février 2009
Messages : 315
Détails du profil
Informations personnelles :
Nom : Cédric L.
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 315
Points : 436
Points : 436
Je fais toujours par le fichier yml mais je viens de faire un essai avec les annotations qui fonctionne non sans embuche!

Avant de generer, il y a la possibilité de faire

Code :
php app/console doctrine:mapping:info
Cela me renvoi dans mon cas avec mon mapping au format yml:
Citation:
Found 1 entities mapped in entity manager 'default':
[OK] Bundle\UserBundle\Entity\Users
Annotations:

Apres si je change la config comme tu le dis (et ce sont les bonnes infos http://docs.symfony-reloaded.org/gui...iguration.html ):
Code :
1
2
3
4
5
6
7
doctrine.orm:
    auto_generate_proxy_classes: %kernel.debug%
    entity_manager:
        default:
            connection: default
    mappings:
        UserBundle: { type: annotation, dir: Entity/ }
Par la commande precedente, j'obtiens :

Citation:
File mapping drivers must have a valid directory path, however the given path [C:\apache2\data\Symfony2\src\Bundle\UserBundle\Resources\config\
doctrine\metadata\orm] seems to be incorrect!
Et la... pas cool! Par contre, cela nous renseigne sur le fait que le coco ne va pas chercher au bon endroit! Il garde toujours l ancien chemin de la config en yml!

Et la solution magique est de supprimer le dossier "cache/prod". C'est le fichier "appProdProjectContainer.php" qui retient l ancien "driver" malgré le changement de config.
ET PAF CA FONCTIONNE!

J'avais meme essayé une suppression de cache par la console mais il garde le fichier qui cause problème.
RapotOR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 10h31   #24
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
lol, si on peut dire.

J'ai fais les mêmes manipulation et ... nada.

En fait je dois avoir un problème dans ma configuration, mais où ? Le
Code :
console doctrine:mapping:info
me retourne
Citation:
Found 0 entities mapped in entity manager 'default':
hors je ne vois pas où j'aurais pu définir un entity manager 'default'. Ni où il pourrait pointer.

M'est avis qu'une fois que j'aurais identifié et corrigé ce défaut, ça devrait marcher
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 10h40   #25
Membre éprouvé
 
Cédric L.
Inscription : février 2009
Messages : 315
Détails du profil
Informations personnelles :
Nom : Cédric L.
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 315
Points : 436
Points : 436
Ouvre un peu ton fichier ""cache/prod/appProdProjectContainer.php".

Verifie la ligne 39 (ou dans ces eaux la) avec avec des yml, par exemple, j'ai un truc du genre:
Code :
 $d->addDriver(new \Doctrine\ORM\Mapping\Driver\YamlDriver(array(0 => 'C:\\apache2\\data\\Symfony2\\src\\Bundle\\UserBundle\\Resources\\config\\doctrine\\metadata\\orm')), 'Bundle\\UserBundle\\Entity');
Pour l annotation, tu devrais avoir AnnotationDriver au lieu de YamlDriver ainsi que le chemin correspondant.



sinon au niveau de l'entité, voici ce que j ai:

Code :
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
/**
 * Bundle\UserBundle\Entity\Users
 */
namespace Bundle\UserBundle\Entity;
 
use Symfony\Component\Security\Core\User\AccountInterface;
 
/**
 * @orm:Entity
 */
class Users implements AccountInterface
{
    /**
     * @orm:Id
     * @orm:Column(type="bigint")
     * @orm:GeneratedValue(strategy="IDENTITY")
     */
    private $id;
 
    /**
     * @orm:Column(type="string", length="100")
     */
    private $username;
 
    /**
     * @orm:Column(type="string", length="40")
     */
    private $password;
 
}
Si apres cela, ca ne va pas... je ne sais pas.
RapotOR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h05   #26
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je n'ai pas de ligne :mais essayant de travailler sans yaml, je ne pense pas que cela soit grave.

Par contre j'ai une ligne :
Code :
$d->setEntityNamespaces(array());
qui me laisse perplexe. Manifestement il ne trouve pas mes namespaces pour mes entity. Ce qui explique qu'il ne puisse rien générer.

Il me faut maintenant trouver comment, dans la configuration, lui dire où trouver ces informations.

En tout les cas, merci pour ce fichier, il me semble une vraie mine d'or pour comprendre et debuger les problèmes de configuration de Sf2.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h10   #27
Membre éprouvé
 
Cédric L.
Inscription : février 2009
Messages : 315
Détails du profil
Informations personnelles :
Nom : Cédric L.
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 315
Points : 436
Points : 436
Ton erreur est la suivante (j'espere ).

Dans ton Entité, tu as:

Code :
1
2
3
4
5
6
7
/*
* @Entity
*/
class Personne
{
//...
}
Or, tu devrais avoir:

Code :
1
2
3
4
5
6
7
/**
 * @orm:Entity
 */
class Personne
{
//...
}
RapotOR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h24   #28
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Tu as raisons. En plus je l'avais lu. Tous les paramètres en commentaire pour l'orm commence par "@orm:"

Sauf que, si cela enlève un future problème, cela ne résous pas celui de la configuration qui fait que symfony2 ne trouve pas où sont les entities.

Dans ta configuration, tu as quoi pour la ligne : setEntityNamespaces() ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h35   #29
Membre éprouvé
 
Cédric L.
Inscription : février 2009
Messages : 315
Détails du profil
Informations personnelles :
Nom : Cédric L.
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 315
Points : 436
Points : 436
Voici ce qui concerne la recherche des annotations:

Code :
1
2
3
4
5
6
        $d = new \Doctrine\Common\Annotations\AnnotationReader();
        $d->setAnnotationNamespaceAlias('Doctrine\\ORM\\Mapping\\', 'orm');
        $e = new \Doctrine\ORM\Mapping\Driver\DriverChain();
        $e->addDriver(new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($d, array(0 => 'C:\\apache2\\data\\Symfony2\\src\\Bundle\\UserBundle\\Entity')), 'Bundle\\UserBundle\\Entity');
        $f = new \Doctrine\ORM\Configuration();
        $f->setEntityNamespaces(array('UserBundle' => 'Bundle\\UserBundle\\Entity'));
Tu remarques qu il y a tout de meme "AnnotationDriver" !

Oublie pas de supprimer les dossiers "cache/prod" et "cache/dev" pour eviter de garder de vieux parametres qui corserait le bazard!
RapotOR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 12h23   #30
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je confirme que le nettoyage du cache n'est pas un luxe, plus automatique et semblerait devoir être fais "à la mano"..;

J'ai revu mon config.yml par un copié collé de la doc puis des adaptations
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
doctrine.orm:
  mappings:
    GeneralBundle: { type: annotation, dir: Entity/ }
    PersonneBundle: yml
  auto_generate_proxy_classes: true
  proxy_namespace: Proxies
  proxy_dir: %kernel.cache_dir%/doctrine/orm/Proxies
  default_entity_manager: default
  default_connection: default
  metadata_cache_driver: array
  query_cache_driver: array
  result_cache_driver: array
je ne comprend pas où est la différence par rapport au précédent (sauf que j'ai rajouté un bundle dans un deuxième temps) mais celui-ci passe et la suppression du cache puis sa génération (console cache:warmup) me donne un code dans appDevProjectContainer.php plus conforme a mes attentes.
Code :
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
 
    protected function getDoctrine_Orm_DefaultEntityManagerService()
    {
        $a = new \Doctrine\Common\Cache\ArrayCache();
        $a->setNamespace('sf2orm_default');
        $b = new \Doctrine\Common\Cache\ArrayCache();
        $b->setNamespace('sf2orm_default');
        $c = new \Doctrine\Common\Cache\ArrayCache();
        $c->setNamespace('sf2orm_default');
        $d = new \Doctrine\Common\Annotations\AnnotationReader();
        $d->setAnnotationNamespaceAlias('Doctrine\\ORM\\Mapping\\', 'orm');
        $e = new \Doctrine\ORM\Mapping\Driver\DriverChain();
        $e->addDriver(new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($d, array(0 => 'D:\\MesFichiers\\Sites\\Symfony2\\test2\\src\\Diags\\GeneralBundle\\Entity')), 'Diags\\GeneralBundle\\Entity');
        $e->addDriver(new \Doctrine\ORM\Mapping\Driver\YamlDriver(array(0 => 'D:\\MesFichiers\\Sites\\Symfony2\\test2\\src\\Diags\\PersonneBundle\\Resources\\config\\doctrine\\metadata\\orm')), 'Diags\\PersonneBundle\\Entity');
        $f = new \Doctrine\ORM\Configuration();
        $f->setEntityNamespaces(array('GeneralBundle' => 'Diags\\GeneralBundle\\Entity', 'PersonneBundle' => 'Diags\\PersonneBundle\\Entity'));
        $f->setMetadataCacheImpl($a);
        $f->setQueryCacheImpl($b);
        $f->setResultCacheImpl($c);
        $f->setMetadataDriverImpl($e);
        $f->setProxyDir('D:\\MesFichiers\\Sites\\Symfony2\\test2\\app/cache/dev/doctrine/orm/Proxies');
        $f->setProxyNamespace('Proxies');
        $f->setAutoGenerateProxyClasses(true);
        $f->setClassMetadataFactoryName('Doctrine\\ORM\\Mapping\\ClassMetadataFactory');
        return $this->services['doctrine.orm.default_entity_manager'] = call_user_func(array('Doctrine\\ORM\\EntityManager', 'create'), $this->get('doctrine.dbal.default_connection'), $f);
    }
Sauf que les commandes info et doctrine:generate:entities ne marchent pas mieux, ni pour le test en yml ni pour celui en entity annotées.

J'ai un peu l'impression de piétiner sur place.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 12h39   #31
Membre éprouvé
 
Cédric L.
Inscription : février 2009
Messages : 315
Détails du profil
Informations personnelles :
Nom : Cédric L.
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 315
Points : 436
Points : 436
Cela me semble deja mieux.

Je plancherais bien pour ton config, peux tu ajouter ceci dans doctrine.orm?
Code :
1
2
3
    entity_manager:
        default:
            connection: default
Tu sais montrer tes entités?
(au fait, si tu as le temps de te connecter au chat dvp, ce serait plus rapide pour echanger)
RapotOR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 21h00   #32
Membre actif
 
Inscription : mai 2008
Messages : 187
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mai 2008
Messages : 187
Points : 193
Points : 193
Salut,

Personnellement j'ai eu du mal à comprendre qu'il fallait supprimer le cache aussi...

Après moi ça fonctionne, dans mon config.yml j'ai ceci :

Code :
1
2
3
4
5
6
 
doctrine.orm:
    default_entity_manager: default
    auto_generate_proxy_classes: "%kernel.debug%"
    mappings:
        HelloBundle: { type: yml, dir: Resources/config/doctrine/metadata/orm }
Ensuite dans la console j'ai testé la commande : app/console doctrine:generate:entity "HelloBundle" "User" --fields="name:string(255) description:test" --mapping-type="yml"

ce qui m'a créé une classe User.php, l'entité et le fichier .dcm.yml

J'ai ensuite supprimé la classe User.php et modifié le fichier yml, et ensuite fait un app/console doctrine:generate:entities "HelloBundle"

Si on efface pas l'entité, les modifications ne sont pas effectuées, je pense que ça doit pouvoir se faire sans avoir à supprimer à chaque fois la classe...

Ensuite un doctrine:mapping:info fonctionne également.

Courage ! La doc est là mais...mouais
__________________
Github
spike2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 08h04   #33
Membre éprouvé
 
Cédric L.
Inscription : février 2009
Messages : 315
Détails du profil
Informations personnelles :
Nom : Cédric L.
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 315
Points : 436
Points : 436
Le probleme de Michel pour les annotations etait le suivant:

Les commentaires etaient mal ecrits, il avait :
- l alias "orm"
- il manquait une etoile !

Petit renseignement additionnel.

Vous n'aimez pas avoir "orm" dans vos entités? Vous preferez "totoo" ?

Pas de probleme!!!

Ajoutez ceci dans votre config (+ supprimez le cache)!
Code :
1
2
3
4
5
6
7
services:
    doctrine.orm.metadata.annotation_reader:
        id: doctrine.orm.metadata.annotation_reader
        class: %doctrine.orm.metadata.annotation_reader_class%
        public: false
        calls:
            - [setDefaultAnnotationNamespace, [Doctrine\ORM\Mapping\, totoo]]
Tadaaaaa!

Dans le cache, la definition de votre "annotation namespace" est maintenant :

Code :
$d->setDefaultAnnotationNamespace('Doctrine\\ORM\\Mapping\\', 'totoo');
C'est beau!

En fait, on peut configurer tous les services comme cela... génial!
RapotOR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 10h19   #34
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je complète la réponse de RapotOR avec qui on a passé l'après-midi sur le chat (pauvre bête).

En effet, la génération d'entités avec annotation est vicieuse. Non seulement il faut que la syntaxe dans le commentaire soit précise (en effet, elle a changé récemment et maintenant la commande @Entity doit commencer comme toutes les autres par @orm:Entity). Mais en plus il faut le schéma de la mise en place des commentaire est très (trop ?) précis.

Code :
1
2
3
4
 
/**
* @orm:VotreCommandeCommentaire
*/
les / et les * doivent être sous cette forme exactement. Dans mon essais il manquait une * sur la première ligne ("/*") ce qui a suffit. J'ai testé d'autres combinaison ('/***' ou '** @orm') qui génèrent la même erreur...

J'extrapole la syntaxe à tous les blocs d'annotation/commande pour chaque propriétés.


Je confirme que l’extension pour les yaml DOIT être .dcm.yml c'est en dur dans le code.


La nouvelle structure de génération dans le couple Symfony 2 et Doctrine 2 me laisse un peu déçus. En effet, l'entité devient un élément clés de l'application, c'est là que va se retrouver au final toute l'intelligence du modèle et nos méthode particulière d'accès aux données. Hors, si l'on régénère depuis du yaml ou du xml il faut supprimer les classe existantes. Comment sauvegarder notre code rajouté dans ces entités ? On ne retrouve plus la double hiérarchie lourde mais salvatrice de la version 1.

D'où mes questions :
  • a-t-on intérêt à rester en yml pour le schéma ?
  • peut-on envisager de créer un dossier EntityModele qui reprenne chaque classes de entity pour ce qui est des ajouts, Doctrine 2 va-t-il l'accepter ?
  • doit-on tous travailler sur des entity annotée ?
Pour l'instant j'ai choisi la dernière solution, même si je trouve l'écriture du schéma en yml beaucoup plus concise et lisible.

Edit : Vu le post de RapotOR posté pendant que j'écrivais celui-ci, je vais mettre un bémol sur l'obligation de l’extension .dcm.yml ce qui est en dur est la valeur par défaut...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h07   #35
Membre éprouvé
 
Benjamin Thuillier
Inscription : juillet 2010
Messages : 195
Détails du profil
Informations personnelles :
Nom : Benjamin Thuillier
Âge : 23
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : juillet 2010
Messages : 195
Points : 472
Points : 472
De ce que j'ai pu me renseigner, doctrine 2 s'inspire fortement d'hibernate. Et dans hibernate il faut créer chaque entity à la main ( avec le même système d'annotation ). Ici donc pas de génération automatique des entités. Et je pense qu'il va falloir avec doctrine 2 apprendre à ne plus utiliser la génération automatique des modèles( entities).
gilwath est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 14h07   #36
Membre actif
 
Inscription : mai 2008
Messages : 187
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mai 2008
Messages : 187
Points : 193
Points : 193
Il est possible d'ajouter des options présentes dans les commandes de Doctrine2, par exemple update et regenerate. Bien que la documentation de Doctrine précise que si on mets à jour notre document .dcm, la mise à jour n'effacera pas ce qui a déjà été créé, mais va seulement ajouter les modifications.

Si vous avez fait un champs musiq et que vous changez par musique, dans l'entité créée il y aura les deux champs...donc à supprimer manuellement.

Citation:
If you use the "--update-entities" or "--regenerate-entities" flags your exisiting code gets overwritten. The EntityGenerator will only append new code to your file and will not delete the old code. However this approach may still be prone to error and we suggest you use code repositories such as GIT or SVN to make backups of your code.
Pour faire la modification soit-même, aller dans Symfony\Bundle\DoctrineBundle\Command\GenerateEntitiesDoctrineCommand.php, et modifier par exemple comme ceci:
Code :
1
2
3
4
5
6
7
8
9
protected function configure()
    {
        $this
            ->setName('doctrine:generate:entities')
            ->setDescription('Generate entity classes and method stubs from your mapping information.')
            ->addArgument('bundle', InputArgument::REQUIRED, 'The bundle to initialize the entity or entities in.')
            ->addOption('entity', null, InputOption::VALUE_OPTIONAL, 'The entity class to initialize (shortname without namespace).')
            ->addOption('update-entities',null, InputOption::VALUE_OPTIONAL,'update')
            ->addOption('regenerate-entities',null, InputOption::VALUE_OPTIONAL,'regenerate')
Videz le cache et testez.

Mais j'imagine que ça sera certainement implémentée dans la version finale de SF2...

Les commandes de Doctrine2
__________________
Github
spike2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2011, 21h30   #37
Invité régulier
 
Vincent
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 5
Points : 5
Bonjour,

J'ai été confronté comme vous au problème "... does not contain any mapped entities" la commande doctrine:generate:entities ne fonctionne pas chez moi, j'ai des probleme de noms. Par contre, je m'en suis sorti en partant du fichier dcm.xml créé par doctrine:generate:entity et en régénérant la classe. Je me suis noté ma démarche complète ici pour mémoire.

Merci Spike pour le truc sur l'update et le regenerate... J'ai bien cherché un petit bout de temps pour trouver comment mettre à jour mon entitée !!!

Une petite question en passant :

Pour la création d'une nouvelle table... Vous créez d'abord la table dans la base de donnée puis vous demandez à Doctrine de l'importer ou alors vous faites d'abord vos entities dans le framework puis ensuite vous generez le schema dans votre base ?
Vbz31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 22h49   #38
Membre éprouvé
 
Cédric L.
Inscription : février 2009
Messages : 315
Détails du profil
Informations personnelles :
Nom : Cédric L.
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 315
Points : 436
Points : 436
J'aime beaucoup la modification de spike.
Voyez vous un moyen simple d'overloader proprement les commandes définies par défaut? Je ne veux pas vraiment modifier les fichiers originels du doctrinebundle, c'est pas propre à mon gout et dangereux vu que le code est encore pas entièrement stable.
RapotOR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 09h48   #39
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Il faudrait tester ce que donne un bundle tierce qui déclarerait les mêmes spacename mais après dans l'autoloader (ou avant).

A mon avis il devrait passer en priorité et permettre de sucrer un module d'un autre bundle.

En espérant que le passage ne soit pas aléatoire ou sujet au contexte.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 19h27   #40
Membre éprouvé
 
Cédric L.
Inscription : février 2009
Messages : 315
Détails du profil
Informations personnelles :
Nom : Cédric L.
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 315
Points : 436
Points : 436
exact, il suffit de mettre un dossier "Command" avec des fonctions personnelles.
cela contourne le probleme: le seul ennui est que ca allonge la liste... dommage...
RapotOR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h25.


 
 
 
 
Partenaires

Hébergement Web