2016-06-27 2 views
1

répertoire par défaut pour mes cours est: app/Comment faire propel construire des modèles avec des espaces de noms dans le bon répertoire?

Composer config est autoload:

{ 
    "autoload": { 
     "psr-4": { "App\\": "app/" } 
    } 
} 

Sur le schema.xml Propel mon espace de noms est "App\Models"

<database name="default" defaultIdMethod="native" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="http://xsd.propelorm.org/1.6/database.xsd" 
      namespace="App\Models" 
     > 
    <table name="user"> 
     <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/> 
     <column name="email" type="varchar" size="255" required="true"/> 
     <column name="password" type="varchar" size="60" required="true"/> 
     <column name="country_id" type="integer" required="true"/> 
     <column name="timezone" type="varchar" size="50" required="true"/> 
     <foreign-key foreignTable="country"> 
      <reference local="country_id" foreign="id"/> 
     </foreign-key> 
    </table> 

    <table name="country"> 
     <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/> 
     <column name="name" type="varchar" size="128" required="true"/> 
    </table> 
</database> 

Mon propel.php.dist est :

<?php 
return [ 
    'propel' => [ 
     'paths' => [ 
      // The directory where Propel expects to find your `schema.xml` file. 
      'schemaDir' => 'database/schemas', 

      // The directory where Propel should output generated object model classes. 
      'phpDir' => 'app/Models' 
     ] 
    ] 
]; 

Lorsque j'ai execu te vendor/bin/propel model:build la structure résultante est comme ceci:

/app/ 
|___Models/ 
    |___App/ 
     |___Models/ 
      |___Base/ 
      |___Map/ 
      |___Country.php 
      |___CountryQuery.php 
      |___User.php 
      |___UserQuery.php 

J'ai besoin que la structure soit comme ceci:

/app/ 
|___Models/ 
    |___Base/ 
    |___Map/ 
    |___Country.php 
    |___CountryQuery.php 
    |___User.php 
    |___UserQuery.php 

J'ai essayé toutes les combinaisons dans ce manuel: Database Attributes

est-il une autre façon aborder cela?

Merci d'avance.

Répondre

0

Jetez un oeil à votre fichier build.properties.

Vous devriez avoir quelque chose de similaire à ceci:

propel.packageObjectModel    = true 
propel.generator.targetPackage   = App\Models 
0

Voici une approche qui fonctionne comme demandé:

composer.json

} 
    "autoload": { 
     "classmap": ["app/"] 
    } 
} 

... Compositeur dit aux classes autoload dans ce dossier

propel.php.dist

<?php 
return [ 
    'propel' => [ 
     'paths' => [ 
      // The directory where Propel expects to find your `schema.xml` file. 
      'schemaDir' => 'database/schemas', 

      // The directory where Propel should output generated object model classes. 
      'phpDir' => 'app' 
     ] 
    ] 
]; 

... dit Propel de mettre vos classes de modèle dans le même dossier (app) dans lequel compositeur autoload

schema.xml

<database ... namespace="Models"> 
    ... 
</database> 

... dit Propel à utiliser la Models espace de noms pour tous vos modèles

vous pouvez utiliser un modèle avec

use \Models\Country; 
new Country(); 
1

Vous devez Changue votre espace de noms de base de données dans votre schema.xml, vous devez définir l'espace de noms:

namespace = "\ app \ Modèles"

+0

Pay attencion à la "\" - l'espace de noms racine –