2013-06-07 10 views
20

Attualmente sto sviluppando su Windows con WampServer e ho Composer funzionante (con OpenSSL), con Propel installato senza problema e tutto sembra funzionare correttamente. Tuttavia, il mio progetto deve ora utilizzare lo Equal Nest Behaviour trovato here.Installazione di comportamenti Propel con Composer

Ho pensato che questo mi avrebbe permesso di usare il comportamento di propulsione. Nel mio schema.xml ho il seguente frammento di codice:

<table name="friend"> 
    <behavior name="equal_nest"> 
    <parameter name="parent_table" value="user" /> 
    </behavior> 
</table> 

Ma quando corro propel-gen sql ottengo l'errore:

[phingcall] Unknown behavior "equal_nest"; make sure you configured the propel.be 
havior.equal_nest.class setting in your build.properties 

La documentazione dice:

Then, if you don't use Composer, or an autoloader in your application, add the following configuration to your build.properties or propel.ini file:

Facendomi presumo che ho didn è necessario inserire il file build.properties. Tuttavia, mettendolo in mi dà il seguente errore:

PHP Fatal error: Class 'EqualNestParentBehavior' not found in C:\home\movesleag 
ue.com\vendor\craftyshadow\propel-equalnest-behavior\src\EqualNestBehavior.php o 
n line 74 

non ero sicuro se fosse qualcosa a che fare con caricamento automatico non funziona o spazi dei nomi (il mio schema ha uno spazio dei nomi, ma ottengo questo stesso errore durante la rimozione anche lui).

Il mio file composer.json assomiglia a questo:

{ 
    "require": { 
     "craftyshadow/propel-equalnest-behavior": "dev-master" 
    } 
} 

Nota: ho avuto Propel in là se stessa, ma come il comportamento equalnest richiede esso stesso sto solo lasciando che fare il suo lavoro.

Quindi, qual è il modo corretto di utilizzare i comportamenti di Propel con Composer e, se lo faccio correttamente, perché vedo gli errori sopra riportati?

Aggiornamenti

ho aggiunto questa linea in cima EqualNestBehaviour.php:

include __DIR__ . DIRECTORY_SEPARATOR . 'EqualNestParentBehavior.php'; 

E la SQL sembra essere generato correttamente senza errori. Tuttavia, cambiare quel file non mi sembra intelligente! Potrebbe essere un problema con l'autoloading? C'è qualcosa che puoi pensare di poter fare per testarlo?

Posso confermare che l'utilizzo di Equal Nest Behaviour nel mio codice attuale Propel funziona bene, utilizzando funzioni come addFriends() - questo è con i suddetti cambiamenti ancora al loro posto.

Nel mio file autoload_namespaces.php Ho il seguente:

<?php 

// autoload_namespaces.php generated by Composer 

$vendorDir = dirname(dirname(__FILE__)); 
$baseDir = dirname($vendorDir); 

return array(
); 
+0

Suppongo che tu abbia eseguito l'installazione di 'php composer.phar'? Forse prova ad installare sia Propel che Behavior tramite Composer (sembra che sia solo il Behavior) .. – Sam

+0

No, io uso l'installazione globale, quindi solo "installer install" funziona. Come ho detto sopra, il comportamento 'richiede' s Propel 1.6. * Stesso. Ovviamente, la propulsione è installata pubblicamente o non sarei in grado di vedere i messaggi di errore di Propel. – LeonardChallis

+0

Oh, mi sono perso il comportamento incluso Propel 1.6. Sembra davvero un problema di auto-caricamento, proverei con Propel nel file Composer - per ogni evenienza. – Sam

risposta

2

questo è un problema caricamento automatico.

Si prega di verificare di avere

propel.behavior.equal_nest.class = vendor.craftyshadow.propel-equalnest-behavior.src.EqualNestBehavior 

nei tuoi build.properties (per Propel).

Verificare che il file del caricatore automatico generato dal compositore sia incluso durante il processo di avvio dell'applicazione. Il compositore genera un file "vendor/autoload.php".Se lo includi, ottieni automaticamente l'autoloading. E tutto ciò che è installato da Composer si trova automaticamente.

require 'vendor/autoload.php'; 
+0

Sì, il caricamento automatico è un modo molto migliore di fare le cose. Grazie. – LeonardChallis

Problemi correlati