2011-11-16 13 views
33

Obecnie aktualizuję jeden z naszych projektów do CakePHP 2.0. Niestety "pierwsza linia" kodu sprawia problemy i nie mogę znaleźć rozwiązania tego problemu.Ładowanie plików dostawców w CakePHP 2.0

W CakePHP 1.3 Miałem oświadczenie App::import("Vendor", "facebook"); tuż przed zdefiniowaniem klasy AppController. Plik referencyjny znajduje się pod /app/vendors/facebook/facebook.php (i zawiera plik base_facebook.php).

Próbowałem wiele różnych sposobów, aby dołączyć plik teraz w CakePHP 2.0 według nazewnictwa plików i klasy załadunku opisane tutaj: File naming and class loading changes in CakePHP 2.0

I przemianowany na ścieżkę app/Vendor/Facebook/Facebook.php lub app/Vendor/Facebook/facebook.php i spróbował następujące metody:

App::uses("Facebook", "Vendor/Facebook"); 
App::uses("Facebook", "Facebook"); 
App::uses("Facebook", "Vendor/Facebook/Facebook.php"); 
App::uses("Facebook", "Vendor"); 

Czy ktoś może znaleźć sposób na odniesienie się do pliku dostawcy? Z powodu leniwego ładowania powyższe metody nie wywołują błędu/ostrzeżenia, więc denerwujące jest debugowanie tego ...

Odpowiedz

53

Dostawców nie można załadować za pomocą App::uses() w CakePHP, ponieważ CakePHP nie może oczekiwać, że biblioteki zewnętrzne będą śledzić te same standardy dotyczące nazewnictwa folderów i plików. Nadal możesz używać App::import('Vendor', ...), tak jak w wersji 1.3 architektury.

Teraz, korzystając z App::import() dla dostawców jest trochę głupie, jeśli myślisz o tym. To po prostu drogie, gadatliwe i bardzo głupie opakowanie dla require_once().

W wersji 2.0 faktycznie zachęcamy ludzi do używania require lub require_once do swoich bibliotek Vendor. Możesz uzyskać lokalizację folderu dostawcy za pomocą App::path('Vendor') lub po prostu APP . 'Vendor' . DS.

+0

Hi Jose, thx za szybką odpowiedź. require_once działa dobrze - nie myślałem o tym. Niemniej jednak stara składnia App :: import ("Vendor", ...) nie działa dla mnie. –

+2

Btw, stare użycie App :: import() podczas wyświetlania go nie będzie działać, ponieważ musisz podać względną ścieżkę do klasy. Funkcja import() nie będzie już więcej zaglądała do katalogów ze względu na wydajność. Słyszałem o tym raporty, ale w narzędziu do śledzenia zdarzeń nie zostały otwarte żadne bilety. Testy jednostki dla tej funkcji przebiegają jednak zgodnie z oczekiwaniami. Postaram się napisać przykład z prawdziwego świata, aby potwierdzić, że działa zgodnie z oczekiwaniami. Dzięki! –

+4

Więc App :: import ("Vendor", "Facebook/Facebook") powinien załatwić sprawę w twoim przypadku. – mark

0

dokumentacja Ciasto Proponuję za pomocą aplikacji :: zastosowań() including-files-with-app-import

Jednak, stwierdza także, czy masz non-stanard plugin do korzystania z App :: import (z)

App::import('Vendor', 'phpQuery', array('file' => 'bariew/phpquery/phpQuery/phpQuery.php')); 
0

Zakładam "plik dostawcy znajduje się tutaj /app/vendors/facebook/facebook.php.

Poniższa linia powinna zrobić to samo jak App :: import() w starszej wersji CakePHP

require_once(ROOT . DS . 'app' . DS .'Vendor' . DS . 'facebook' . DS . 'src' . DS . 'facebook.php'); 

$facebookApi = new facebook();