Konfiguracja CakePHP i ustawienia aplikacji

cakephpPo zainstalowaniu CakePHP i skonfigurowaniu dostępu do bazy danych, pozostała konfiguracja jest wystarczająca, by zacząć tworzyć oprogramowanie. Warto jednak poznać pliki konfiguracjyjne i najważniejsze opcje w nich zawarte, by dopasować parametry konfiguracyjne dla potrzeb pisanych aplikacji.

Konfiguracja aplikacji jest przechowywana w plikach INI lub PHP. CakePHP posiada domyślnie jeden plik konfiguracyjny, jednak jeśli programista potrzebuje więcej plików, mogą być one załadowane z pliku config/bootstrap.php. Jeżeli tworzona aplikacja ma zawierać bardzo dużo opcji konfiguracji, warto podzielić je na więcej plików i dołączyć je do projektu je w pliku bootstrap.php:

use Cake\Core\Configure;
use Cake\Core\Configure\Engine\PhpConfig;
 
Configure::config('default', new PhpConfig());
Configure::load('app', 'default', false);
Configure::load('other_config', 'default');

Opis głównej konfiguracji w pliku app.php

debug – jeśli true, to włączony jest tryb pisania aplikacji, w którym wyświetlane są błędy oraz ostrzeżenia. False to tryb produkcyjny, zalecany po wdrożeniu aplikacji.

App.namespace – Przestrzeń nazw do do znajdywania app. W przypadku zmiany namespace, wymagana jest także zmiana pliku composer.json aby używała tej przestrzeni nazw.

App.baseUrl – Należy odkomentować tę linię w przypadku, gdy NIE korzysta się z mod_rewrite serwera Apache.  Dodatkowo należy usunąć plik .htaccess.

App.base – Katalog bazowy app. Jeśli opcja ustawiona jest na false, następuje autodetekcja.

App.encoding – Definicja kodowania znaków – domyślnie UTF8. Kodowanie jest używane do generacji znaków w layoucie i obsłudze bazy.

App.webroot – Nazwa katalogu webroot.

App.wwwRoot – Ścieżka do pliku webroot.

App.fullBaseUrl – W pełni kwalifikowana nazwa domeny (łącznie z protokołem) do głównego drzewa aplikacji używane do generowania absolutnych linków URL. Domyślnie wartość ta jest pobierana ze zmiennej $_SERVER. Jednakże, jeśli chcesz zdefiniować ją „ręcznie”, by np. zwiększyć wydajność lub obawiasz się manipulacji przy nagłówku przez użytkowników. W kontekście CLI nie można odczytać wartości fullBaseUrl za pomocą $_SERVER i może być konieczne wygenerowanie URL z konsoli, np. podczas wysyłania e-mail.

App.imageBaseUrl – Ścieżka do katalogu obrazków w katalogu webroot.

App.cssBaseUrl – Położenie plików CSS w katalogu webroot.

App.jsBaseUrl – Ścieżka do plików JavaScript w katalogu webroot.

App.paths – Konfiguracja ścieżek do zasobów frameworka, takich jak: wtyczki, templatki, pliki lokalizacji.

Security.salt – Losowy zestaw znaków, który służy do haszowania. Wartość ta używana jest także do szyfrowania symetrycznego.

Asset.timestamp – Dodawanie wartości timestamp modyfikacji plików CSS, JavaScript, Image przy pomocy helperów. Prawidłowe wartości to: (bool) false – Nie (domyślnie), (bool) true – Dodawanie znacznika czasu w trybie debugowania, (string) ‘force’ – Zawsze dodawać znaczniki czasu.

Database Configuration – Konfiguracja bazy danych – opis w Instalacji CakePHP.

EmailTransport – Konfiguracja serwera e-mail do wysyłania wiadomości z aplikacji.

Dostęp do opcji konfiguracyjnych dostępny jest z dowolnego miejsca aplikacji poprzez Configure::read(‚debug’);

Zapis konfiguracji następuje zaś za pomocą instrukcji Cake\Core\Configure::write($key, $value);

Można także używać funkcji write() do zapisywania konfiguracji aplikacji:

Configure::write('Company.name','Pizza, Inc.');
Configure::write('Company.slogan','Pizza for your body and soul');

Notacja z kropką używana w parametrze $klucza jest używana do organizowania opcji konfiguracyjnych w grupy.

Przykładowy zapis pojedynczych wartości konfiguracyjnych:

Configure::write('Company', [
 'name' => 'Pizza, Inc.',
 'slogan' => 'Pizza for your body and soul'
 ]);

Możesz także przełączać się pomiędzy trybem debug i production w locie za pomocą Configure::write(‚debug’, $bool).

Odczyt danych konfiguracyjnych

static Cake\Core\Configure::read($key = null)

służy do odczytu danych konfiguracji z poziomu aplikacji. Domyślnie używana przez CakePHP do ważnej informacji o wartości debug. Jeśli tak, zostają zwrócone dane. Oto przykład odczytu w z funkcji zapisującej write():

Configure::read('Company.name');    // Yields: 'Pizza, Inc.'
 Configure::read('Company.slogan');  // Yields: 'Pizza for your body
 // and soul'
 
Configure::read('Company');
 
// Yields:
 ['name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul'];

Jeżeli wartość $key jest null, zostaną zwrócone wszystkie wartości z Configure.

static Cake\Core\Configure::readOrFail($key)

Odczytuje wartości konfiguracyjne podobnie jak w przypadku Cake\Core\Configure::read jednak wymaga pary key/value (klucz – wartość klucza). Jeżeli jednak taka para nie istnieje, zostaje wyrzucony wyjątek RuntimeException:

Configure::readOrFail('Company.name');    // Yields: 'Pizza, Inc.'
Configure::readOrFail('Company.geolocation');  // Wywoła wyjątek
 
Configure::readOrFail('Company');
 
// Yields:
 ['name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul'];

Nowość w wersji 3.1.7: Configure::readOrFail() – sprawdza, czy są zdefiniowane dane w konfiguracji

static Cake\Core\Configure::check($key)

uzywane do kontroli czy key/path istnieje i czy nie jest wartością null:

$exists = Configure::check(‚Company.name’);

Usuwanie danych konfiguracyjnych

static Cake\Core\Configure::delete($key)

Używane do usuwania informacji z ustawień konfiguracji aplikacji:

Configure::delete(‚Company.name’);

Odczyt i kasowanie danych konfiguracji

static Cake\Core\Configure::consume($key)

Odczyt i usunięcie klucza z konfiguracji. Funkcja jest pomocna w przypadku, gdy chcesz jednocześnie odczytać i usunąć wartość w pojedynczej operacji.

Odczyt konfiguracji i zapis plików konfiguracyjnych

static Cake\Core\Configure::config($name, $engine)

CakePHP przynosi dwa typy wbudowanego silnika konfiguracji. Cake\Core\Configure\Engine\PhpConfig jest przeznaczony do odczytu plików konfiguracyjnych PHP w tym samym formacie co opisana wcześniej. Cake\Core\Configure\Engine\IniConfig jest przeznaczony do odczytu plików konfiguracyjnych typu INI.

use Cake\Core\Configure\Engine\PhpConfig;

// Odczyt plików konfiguracyjnych z pliku
Configure::config(‚default’, new PhpConfig());

// Odczyt plików konfiguracyjnych z innej ścieżki.
Configure::config(‚default’, new PhpConfig(‚/path/to/your/config/files/’));

CakePHP umożliwia stosowanie wielu typów silników w konfiguracji, które wykorzystują różne rodzaje źródeł plików konfiguracyjnych. Dzięki temu można używać wielu opcji konfiguracji. Aby sprawdzić alias silnika stosowanego do konfiguracji pliku, można użyć Configure::configured():

// Pobiera tablicę aliasów dla dołączonych silników.
Configure::configured();

// Kontrola konkretnie załączonego silnika
Configure::configured(‚default’);

static Cake\Core\Configure::drop($name)

Można także usuwać konkretne silniki. Configure::drop(‚default’) spowoduje usunięcie domyślnego aliasu silnika. Po tym próba załadowania plików konfiguracyjnych przy pomocy tego silnika zawiedzie:

Configure::drop(‚default’);

Załadowanie plików konfiguracyjnych

static Cake\Core\Configure::load($key, $config = ‚default’, $merge = true)

jednak po załadowaniu silnika konfiguracji, można ponownie załadować pliki konfigureacyjne:

// Załaduj plik my_file.php przy użyciu domyślnego silnika ‚default’.
Configure::load(‚my_file’, ‚default’);

Załadowane pliki konfiguracyjne łączą własne dane w istniejącej konfiguracji, co pozwala na zastępowanie i dodawanie nowy wartości do istniejącej konfiguracji. Jednakże ustawienie zmiennej $merge na true spowoduje, że wartości nigdy nie będą zastępować istniejących konfiguracji.

Tworzenie lub modyfikacja plików konfiguracyjnych

static Cake\Core\Configure::dump($key, $config = ‚default’, $keys =[])

Zrzuca wszystkie lub kilka danych z konfiguracji do pliku lub innego miejsca wspieranego przez silnik konfiguracji. Format serializacji zależy od podłączonego silnika w $config. Na przykłąd, jeśli załączony został silnik ‘default’ Cake\Core\Configure\Engine\PhpConfig, zostanie wygenerowany plik konfiguracyjny PHP przez Cake\Core\Configure\Engine\PhpConfig.

Jeśli domyślny silnik ‘default’ jest instancją PhpConfig. Zapisz wszystkie dane konfiguracji do pliku my_config.php:

Configure::dump(‚my_config’, ‚default’);

Zapisz jedynie konfigurację obsługi błędów:

Configure::dump(‚error’, ‚default’, [‚Error’, ‚Exception’]);

Configure::dump() – będzie użyty do modyfikacji lub nadpisania plików konfiguracyjnych odczytanych przy pomocy Configure::load()

CakePHP jest framorkiem niezwykle rozszerzalnym, a dzięki temu, można tworzyć własne silniki w aplikacji czy w pluginach. Konfiguracja silnika potrzebuje do implementacji Cake\Core\Configure\ConfigEngineInterface. Ten interfejs definiuje metody odczytu. Jeśli lubisz pliki XML, możesz tworzyć prosty silnik dla plików konfiguracyjnych Xml dla aplikacji:

// In src/Configure/Engine/XmlConfig.php
 namespace App\Configure\Engine;
 
use Cake\Core\Configure\ConfigEngineInterface;
 use Cake\Utility\Xml;
 
class XmlConfig implements ConfigEngineInterface
 {
 
public function __construct($path = null)
 {
 if (!$path) {
 $path = CONFIG;
 }
 $this->_path = $path;
 }
 
public function read($key)
 {
 $xml = Xml::build($this->_path . $key . '.xml');
 return Xml::toArray($xml);
 }
 
public function dump($key, array $data)
 {
 // Code to dump data to file
 }
 }

Aby dodać ten silnik do aplikacji, musisz dołączyć go w pliku config/bootstrap.php:

use App\Configure\Engine\XmlConfig;

Configure::config(‚xml’, new XmlConfig());

Configure::load(‚my_xml’, ‚xml’);

Metoda read() silnika konfiguracji musi zwracać tablicę informacji konfiguracji z zasobem zawierającym $key.

interface Cake\Core\Configure\ConfigEngineInterface

Definiowanie interfejsu użytego przez klasę do odczytu danych konfiguracji i przechowywanych w konfiguracji

Cake\Core\Configure\ConfigEngineInterface::read($key)
Parametry:

$key (string) – Nazwa klucza lub identyfikator do załadowania.

Ta metoda ładuje i parsuje dane konfiguracyjne identyfikując je poprzez $key i zwraca tablicę danych w pliku.

Cake\Core\Configure\ConfigEngineInterface::dump($key)
Parametry:

$key (string) – Identyfikator zapisu.
$data (array) – Dane do zrzucenia.

Ta metoda zrzuca/przechowuje dostarczone dane konfiguracyjne do klucza identyfikowanego przez $key.

Wbudowane silniki konfiguracyjne

Pliki konfiguracyjne PHP

class Cake\Core\Configure\Engine\PhpConfig

Umożliwia odczyt plików konfiguracyjnych zapisanych jako plain text PHP. Możesz odczytać pliki z app config lub też z katalogu konfiguracyjnego plugin. Pliki muszą zwracać tablicę. Oto przykład:

return [
 'debug' => 0,
 'Security' => [
 'salt' => 'its-secret'
 ],
 'App' => [
 'namespace' => 'App'
 ]
 ];

Wczytaj własny plik konfiguracyjny umieszczając w pliku config/bootstrap.php wpis:

Configure::load(‚customConfig’);

Pliki konfiguracyjne Ini

class Cake\Core\Configure\Engine\IniConfig

Umożliwia odczyt plików konfiguracyjnych zapisanych zwykłym tekstem w plikach .ini. Pliki ini muszą być kompatybilne z funkcją parse_ini_file().

Separator kropki spowoduje podział wartości do tablicy. Wartości logiczne
Wartości takie jak ‘on’ and ‘off’ są konwertowane do boolean (true/false).

Oto przykładowy plik konfiguracyjny INI:

debug = 0
 
[Security]
 salt = its-secret
 
[App]
 namespace = App

Rezultat powyższego pliku ini jest taki sam, jak dla przykładu z plikiem konfiguracyjnym PHP. Tablicowa struktura zostanie utworzona zarówno jako oddzielona kropką, jak i sekcją. Sekcje mogą zawierać kropkę jako separator dla stworzenia głębszego zagnieżdżenia struktury konfiguracji.

Pliki konfiguracyjne JSON

class Cake\Core\Configure\Engine\JsonConfig

Umożliwia odczyt lub zrzut plików konfiguracji zapisanych jako zakodowany typ JSON w plikach o rozszerzeniach .json.

Przykład pliku konfiguracyjnego typu JSON:

{
 "debug": false,
 "App": {
 "namespace": "MyApp"
 },
 "Security": {
 "salt": "its-secret"
 }
 }

Plik Bootstrap w CakePHP

Jeśli potrzebujesz dodatkowych plików konfiguracji, możesz dodać odwołanie do nich w pliku konfiguracyjnym config/bootstrap.php.

Ten plik jest idealny dla wykonywania zadań rozruchowych aplikacji:

  • Definiowanie dodatkowych funkcji odpowiadających za wygodę obsługi aplikacji.
  • Deklarowanie stałych dla aplikacji.
  • Tworzenie konfiguracji pamięci podręcznej.
  • Konfiguracja przetwarzania stringów.
  • Ładowanie plików konfiguracyjnych.

Nalezy zachować ostrożność podczas projektowania oprogramowania za pomocą MVC i wykorzystywania pliku bootstrap do dodatkowych zadań uruchamiania. W rzeczywistości istnieją lepsze metody dodawania własnej logiki w kontrolerach oraz widokach.

Zmienne środowiskowe

Wielu współczesnych dostawców usług chmurowych, jak na przykład Heroku, pozwala na definiowanie własnych zmiennych środowiskowych. Aby zdefiniować zmienną środowiskową, możesz skonfigurować aplikację CakePHP podążając instrukcjami zawartymi na stronie 12factor. Jest to dobra droga do tworzenia aplikacji, które umożliwiają łatwe jej wdrożenie. Na przykład, jeśli potrzebna jest zmiana nazwy bazy danych, wystarczy zmodyfikować zmienną DATABASE_URL w konfiguracji bez konieczności zmiany kodu źródłowego.

Oto przykład konfiguracji zmiennych w pliku app.php:

DEBUG (0 or 1)
 APP_ENCODING (ie UTF-8)
 APP_DEFAULT_LOCALE (ie en_US)
 SECURITY_SALT
 CACHE_DEFAULT_URL (ie File:///?prefix=myapp_&serialize=true&timeout=3600&path=../tmp/cache/)
 CACHE_CAKECORE_URL (ie File:///?prefix=myapp_cake_core_&serialize=true&timeout=3600&path=../tmp/cache/persistent/)
 CACHE_CAKEMODEL_URL (ie File:///?prefix=myapp_cake_model_&serialize=true&timeout=3600&path=../tmp/cache/models/)
 EMAIL_TRANSPORT_DEFAULT_URL (ie smtp://user:password@hostname:port?tls=null&client=null&timeout=30)
 DATABASE_URL (ie mysql://user:pass@db/my_app)
 DATABASE_TEST_URL (ie mysql://user:pass@db/test_my_app)
 LOG_DEBUG_URL (ie file:///?levels[]=notice&levels[]=info&levels[]=debug&file=debug&path=../logs/)
 LOG_ERROR_URL (ie file:///?levels[]=warning&levels[]=error&levels[]=critical&levels[]=alert&levels[]=emergency&file=error&path=../logs/)

Jeśli zmienna środowiskowa nie jest zdefiniowana, CakePHP będzie używał wartości zdefiniowanej w app.php. Możesz także używać biblioteki php-dotenv do używania zmiennych środowiskowych w lokalnym środowisku deweloperskim.

528total visits,4visits today

Tagi , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

68 + = 72

This site uses Akismet to reduce spam. Learn how your comment data is processed.