2013-06-07 15 views
20

Obecnie pracuję w systemie Windows z WampServer i mam Composer działa (z OpenSSL), z Propel zainstalowany bez problemu, i wszystko wydaje się działać dobrze. Jednak mój projekt musi teraz skorzystać z Equal Nest Behaviour znalezionych here.Instalowanie zachowań Propel z Kompozytorem

Pomyślałem, że pozwoliłoby mi to na zachowanie napędu. W moim schema.xml Mam następujący fragment:

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

Ale kiedy biegnę propel-gen sql pojawia się błąd:

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

Dokumentacja mówi:

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:

Making mi przypuszczać, że nie zrobił 'Trzeba wstawić plik build.properties. Jednak wprowadzenie go w daje mi następujący błąd:

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 

nie byłem pewien, czy to coś wspólnego z autoloading nie działa lub nazw (mój schemat ma nazw, ale pojawia się ten sam błąd przy usuwaniu to też).

Mój plik composer.json wygląda następująco:

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

Uwaga: miałem Propel tam sam, ale jak equalnest zachowanie wymaga ona sama jestem po prostu pozwalając że wykonywać swoje zadania.

Jaki jest poprawny sposób używania Propel behaviors z Composer, a jeśli robię to dobrze, dlaczego widzę powyższe błędy?

Aktualizacje

Dodałem tę linię do góry EqualNestBehaviour.php:

include __DIR__ . DIRECTORY_SEPARATOR . 'EqualNestParentBehavior.php'; 

A SQL wydaje się być generowane poprawnie, bez błędów. Jednak zmiana tego pliku nie wydaje mi się mądra! Czy może to być problem z automatycznym ładowaniem? Czy jest coś, co możesz wymyślić, że mogę to przetestować?

Mogę potwierdzić, że używanie Equal Nest Behaviour w moim rzeczywistym kodzie Propel działa dobrze, przy użyciu funkcji takich jak addFriends() - jest to związane z powyższymi zmianami nadal obowiązującymi.

W moim pliku autoload_namespaces.php mam następujące:

<?php 

// autoload_namespaces.php generated by Composer 

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

return array(
); 
+0

Zakładam, że zrobiłeś 'php composer.phar install'? Może spróbuj zainstalować zarówno Propel, jak i Behavior przez Composer (wydaje się, że tylko zachowanie jest) .. – Sam

+0

Nie Używam instalacji globalnej, więc działa tylko 'composer install'. Jak wspomniałem powyżej, zachowanie 'require's Propel 1.6. * Samo w sobie. Oczywiście, propel jest zainstalowany, działający lub nie byłby w stanie zobaczyć komunikatów o błędach z Propel. – LeonardChallis

+0

Och, brakowało mi zachowania, w tym Propela 1.6. Zdecydowanie wygląda na problem z automatycznym ładowaniem, spróbowałbym go z Propelem w pliku Composer - na wszelki wypadek. – Sam

Odpowiedz

2

Jest to problem autoloading.

proszę sprawdzić, czy masz

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

w swoim build.properties (dla Propelu).

Sprawdź, czy kompilator wygenerowany przez autoloader został dołączony podczas procesu ładowania systemu. Composer generuje plik "vendor/autoload.php".Jeśli je dodasz, automatycznie uzyskasz automatyczne ładowanie. Wszystko zainstalowane przez Composer zostanie znalezione automatycznie.

require 'vendor/autoload.php'; 
+0

Tak, autoload jest o wiele lepszym sposobem robienia rzeczy. Dziękuję Ci. – LeonardChallis

Powiązane problemy