2015-12-08 21 views
6

Mam nową klasę PHP, którą chciałbym wywołać ze sterownika. Gdzie w strukturze folderów CakePHP powinienem umieścić tę nową klasę i jaka jest procedura wywoływania lub używania jej z kontrolera? Z góry dziękuję za współpracę!Gdzie umieścić niestandardową klasę PHP w CakePHP 3?

+1

Jeśli chcesz użyć go z kontrolera, dlaczego nie możesz utworzyć komponentu? – ADmad

+0

Czy klasa jest czymś, co sam napisałeś dla swojej aplikacji CakePHP lub zasobów zewnętrznych? – drmonkeyninja

+0

@drmonkeyninja jest klasą innej firmy. Czy to ma jakieś znaczenie? – Jorge

Odpowiedz

12

Z mojego punktu widzenia, można ponownie wykorzystać dowolną własną klasę a także wszelkie klasy trzeciej strony za użytkowego klasie. Jeśli tak, możesz umieścić klasę w folderze src/Utility. Użyj odpowiedniej przestrzeni nazw. Potem możesz użyć tej klasy w dowolnym miejscu w CakPHP 3.x.

jak umieścić:

Say, masz klasę o nazwie Jorge, zapisz go w folderze src/Utility używając nazwy pliku Jorge.php. Umieść oświadczenie namespace App\Utility; na górze swojego pliku Jorge.php.

JAK STOSOWAĆ:

W którym plik, który chcesz użyć tej klasy, wystarczy umieścić use App\Utility\Jorge;. Następnie możesz wywołać klasę w tym pliku.

ALTERNATYWNE ROZWIĄZANIE:

Jeśli masz trzeci pakiet partii wielu klas, a następnie można śledzić https://stackoverflow.com/a/28527683/1787600

0

Większość kodu pochodzącego z CakePHP, który utworzysz, będzie wchodzić w strukturę opisaną w dokumentacji.

http://book.cakephp.org/3.0/en/intro/cakephp-folder-structure.html

Dla „całkowicie dowolnych klasach użytkowych”, jak zgaduję swoje znaczenie, CakePHP traktuje je jako „zależnościami trzecich” (koncepcyjnie) i zalecamy umieszczenie ich w folderze „sprzedawców”. Możesz zignorować ich zalecenie, aby nie edytować rzeczy w tym folderze, gdy nowa zawartość jest twoim własnym projektem użytkowym.

Aby załadować, należy użyć dobrej starej rodziny php: require.

http://book.cakephp.org/3.0/en/core-libraries/app.html

Jeśli zdarzy się nie używać Kompozytor w swojej aplikacji, trzeba będzie ręcznie załadować wszystko sprzedawca biblioteki siebie.

Możesz użyć globalnych stałych/funkcji CakePHP do budowy ścieżek potrzebnych do require.

http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html

APP, APP_DIR, WWW_ROOT itp

+4

"* Do ładowania, użyj starych dobrych php wymaga rodziny funkcji. *" - CakePHP używa przestrzeni nazw i autoloadera PSR. Nie ma prawie żadnej potrzeby, z wyjątkiem użycia starożytnego kodu, do korzystania już wymagają. Po prostu upewnij się, że przestrzeń nazw i ścieżka pasują do siebie, a klasa automatycznie odnajdzie klasę. – burzum

+0

Jasne, zakładając, że będzie on autorem błyszczącego nowoczesnego pliku, może użyć automatycznego ładowania. Jednakże, jeśli nie używa pełnego pakietu zmodernizowanych narzędzi, może łatwiej będzie użyć starej szkoły 'include', jak w przypadku ściągania jakiejś starszej biblioteki innej firmy? A co, jeśli upewni się, że napisze jakąś funkcję zamiast klasy? Pytanie OP było skoncentrowane na klasie, ale bardziej ogólny przypadek brzmi: "Będę chciał załadować wszystko z pliku, może nawet trochę danych/obrazów/dźwięku/wideo za pomocą dobrze wykonanego, starego zestawu bibliotek, który nie pasuje do Automatycznie ładuj PSR ". – starlocke

0

Można go umieścić w dowolnym miejscu w/src/folderu. Możesz zbierać niestandardowe klasy w takich folderach jak: interfejs, DTO, narzędzie, niestandardowe lub cokolwiek innego. Ponieważ CakePHP 3.x używa autoloadera PSR-4, klasa będzie instancjonowana po użyciu. Trzeba tylko pamiętać, aby dodać poprawną przestrzeń nazw. Na przykład, jeśli chcesz użyć niestandardowego interfejsu, dodaj plik src/Custom/Owned.php

<?php 
namespace App\Custom; 
interface Owned 
{ 
    /** 
    * Find username owning object by object primary id 
    * @param $id 
    * @return string|int 
    */ 
    public function owner($id) : string; 
} 
... 

Następnie można go używać od razu:

... 
class UsersTable extends Table implements Owned 
{ 
... 

Jeśli będzie ponownie użyć klas lepszym rozwiązaniem byłoby, aby stworzyć swój własny pakiet packagist i włączenie go przez kompozytora więc będzie on przechowywany w "/ sprzedawca"

Powiązane problemy