2012-01-24 9 views
10

Piszę małą aplikację w CakePHP 2.1 i chcę użyć wtyczki upload pliku Nicka Baker'a. Pobrałem gałąź cakephp2.0 (wiem, że to jeszcze nie koniec) i umieściłem ją w folderze Plugin moich aplikacji. Wprowadziłem pewne niezbędne modyfikacje, ale jestem ciekawa, jak zastąpić te wywołania funkcji App::import (na początku klas FileUploadComponent, FileUploadBehavior i FileUploadHelper) z funkcją App:uses.Używanie App :: uses (zamiast App :: import) w wtyczce CakePHP 2.1

Należy zaimportować klasę FileUploadSettings z Config/file_upload_settings.php i klasę Uploader z Vendor/upload.php. Można to zrobić za pomocą funkcji require_once, ale jestem pewien, że istnieje sposób CakePHP, aby to zrobić.

Odpowiedz

10

Zgodnie z podręcznikiem Cake App::import() jest porównywalny ze sposobem, w jaki działa require_once(). Z tego co rozumiem, można załadować klasy przy użyciu App:uses() i plików dostawców przy użyciu App:import().

Dokumentacja API mówi the following na ten temat:

Wszystkie klasy, które zostały załadowane w przeszłości przy użyciu App::import(‘Core’, $class) będą musiały być ładowane przy użyciu App::uses() odnosząc się do właściwego opakowania. Ta zmiana zapewniła dużą wydajność w ramach.

  • Metoda nie wygląda na zajęcia rekurencyjnie, to bezwzględnie wykorzystuje wartości dla ścieżek zdefiniowanych w App::build()
  • to nie będzie w stanie załadować App::import('Component', 'Component') korzystanie App::uses('Component', 'Controller');.
  • Ładowanie klas podstawowych nie jest już możliwe przy użyciu App::import('Lib', 'CoreClass');. Zaimportowanie nieistniejącego pliku, podanie niewłaściwego typu lub nazwy pakietu, lub wartości parametrów dla parametrów i $file spowoduje fałszywą wartość zwracaną.
  • App::import('Core', 'CoreClass') nie jest już obsługiwany, zamiast niego należy użyć App::uses(), aby umożliwić autoloadingowi klasy zajmij się resztą.
  • Ładowanie plików dostawców nie wygląda rekurencyjnie w folderze dostawców, nie będzie również konwertować pliku na podkreślony, tak jak to miało miejsce w przeszłości.

Przewodnik migracji ma również some things to say o App:uses() i jest dobrym punktem wyjścia w ogóle porównać najlepsze praktyki do 2,0 ze starszymi metodami z 1,3 i niższy.

This related question oferty z plikami ładowanie dostawcy w Placek 2.0, nie mogę zweryfikować twierdzenie przez Jose Lorenzo że App:import() jest „głupie wrapper” dla require_once(), ani stwierdzenie, że jest to preferowany sposób w tym pliki. Jedyne odniesienie, jakie mogłem znaleźć dla tego ostatniego, to Coding Standards dla twórców ciastek, a mianowicie. programiści wnoszący wkład do rdzenia Ciasta, a nie aplikacje oparte na strukturze.

EDIT

Powiedzmy chcesz zaimportować Twitter OAuth library, zamieszkały w Vendor/twitter, główny plik klasy jest twitteroauth.php w Vendor/twitter/twitteroauth/twitteroauth.php:

App::import('Vendor', 'twitteroauth', array('file' => 'twitter'.DS.'twitteroauth'.DS.'twitteroauth.php')); 
27

Z tego co ja zebrane:

  • użyć import() do bibliotek zewnętrznych
  • i uses() ram dla plików

Na przykład:

App::import('Vendor', 'ExternalLibrary'); 
App::uses('Inflector', 'Cake.Utility'); 
+3

proste. Bezpośredni. Poprawny. Dziękuję Ci! – zmonteca