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?
Odpowiedz
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
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
"* 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
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
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"
Jeśli chcesz użyć go z kontrolera, dlaczego nie możesz utworzyć komponentu? – ADmad
Czy klasa jest czymś, co sam napisałeś dla swojej aplikacji CakePHP lub zasobów zewnętrznych? – drmonkeyninja
@drmonkeyninja jest klasą innej firmy. Czy to ma jakieś znaczenie? – Jorge