2009-03-12 14 views
21

Chciałbym utworzyć zmienną globalną w CakePHP. Gdybym zdefiniować coś w moim app_controller.php jakJaki jest najlepszy sposób tworzenia zmiennych globalnych w CakePHP?

var $varName 

mogę uzyskać dostęp

$this->varName 

z żadnym z moich kontrolerów, ale nie mogę się do niego dostać z modeli.

Jak utworzyć globalną zmienną dostępną z modeli?

Wartość zmiennej $ varName jest znana dopiero po uruchomieniu, więc nie sądzę, że opcja bootstrap.php jest opcją.

Odpowiedz

30

CakePHP nowego Configure class można używany do przechowywania i pobierania wartości konkretnych aplikacji lub środowiska wykonawczego. Bądź ostrożny, klasa ta pozwala zapisywania czegokolwiek w nim, a następnie używać go w żadnej innej części kodu

+6

Jest to stary odpowiedź, ale ktoś się zastanawiać, dlaczego należy „uważać”, to dlatego, że ta klasa jest 'pewny pokusa przełamać wzorzec MVC CakePHP został zaprojektowany dla. Głównym celem klasy Configure jest utrzymywanie scentralizowanych zmiennych, które mogą być współużytkowane przez wiele obiektów. Pamiętaj, aby spróbować żyć według "konwencji ponad konfiguracją" i nie skończysz z przełamaniem struktury MVC, którą ustawiliśmy. " – swiecki

+0

Czy jest to dobre miejsce na umieszczenie zmiennej globalnej dla trybu testowego vs trybu na żywo? Mam pewne procedury, które chcę zachowywać się inaczej, jeśli testujemy. – zkent

-2

Właściwie, dlaczego to robisz? Model nie powinien mieć pojęcia, że ​​istnieje kontroler.

Jeśli jest to obiekt biznesowy (modelowy), utwórz go jako taki. Jeśli nie, model nie powinien o tym wiedzieć.

+3

Niektóre zmienne globalne są dość standardowe. Na przykład mój serwer testowy i mój serwer produkcyjny znajdują się w dwóch bardzo różnych domenach i często muszę tworzyć łącza do nich ... nawet w modelach. A zatem posiadanie zmiennej globalnej nie narusza zasad projektowania. To może potencjalnie uratować cię od łamania zasad projektowania. –

+4

Istnieje kilka prostych rzeczy, które nie są warte dodatkowych wywołań bazy danych/cylindrów procesora/odczytów dysku, aby utworzyć model itp., Tylko ze względu na prostą listę wartości. Zasady projektowania są właśnie tym - zasadami. Czasami zasada nie odnosi się do realnego świata. – Hippyjim

29

Aby zapisać zmienne globalne użyć Configure klasie. Na przykład:

Configure :: write ("Company.name", "Pizza, Inc.");

do odczytu zmiennej później w dowolnym miejscu swojego użycia kodu:

Configure :: read ('Company.name'); // daje: "Pizza, Inc."

Zalecana plik do przechowywania globalnych stałych jest w app/config/bootstrap.php

uzyskać więcej informacji na stronie:
Konfiguracja klasy - Configure Class CakePhp. lub sekcja 3.4.7 na temat ładowania początkowego

+1

Odpowiedź Axa była prawidłowa, ale dałem +1 za podanie przykładu - właśnie to, czego potrzebowałem, robiąc to w Google. – Hippyjim

+0

To jest w porządku, ale jeśli dane są specyficzne dla użytkownika, klasa sesji może być przydatna – Musa

1

Możesz zdefiniować stałe w pliku bootstrap.php w katalogu app/config /. Może być używany globalnie do dowolnego kontrolera lub widoku.

5

Możesz zadeklarować zmienną globalną w aplikacji/cofig/core.php

Configure::write('variable Name','Variable Value'); 

można wydrukować tak:

Configure::read('Variable Name'); 
0

Można spróbować zdefiniować stałe z bootstrap.php (ciasto 3)

Plik ten jest idealnym rozwiązaniem dla wielu wspólnych bootstrappingu zadania:

Definiowanie funkcji wygody.

Deklarowanie stałych.

Definiowanie konfiguracji pamięci podręcznej.

Definiowanie konfiguracji rejestrowania.

Ładowanie niestandardowych fleksji.

Ładowanie plików konfiguracyjnych.

ref https://book.cakephp.org/3.0/en/development/configuration.html#bootstrapping-cakephp

Powiązane problemy