Tworzenie i uruchamianie projektu Phalcon
Czym jest Phalcon?
Phalcon to otwartoźródłowy, wysokowydajny framework PHP dla aplikacji WWW, zaimplementowany jako rozszerzenie C. Dzięki tej unikalnej konstrukcji Phalcon cechuje się niezwykle niskim zużyciem zasobów i bardzo wysoką szybkością działania, przewyższając większość tradycyjnych frameworków PHP. Phalcon bazuje na architekturze MVC (Model-View-Controller) i oferuje szeroki zbiór bogatych komponentów, takich jak ORM (mapowanie obiektowo-relacyjne), silnik szablonów, routing, cache, menedżer zdarzeń i wiele innych, pozwalając szybko budować skalowalne, wydajne aplikacje webowe oraz API.
Kluczowe cechy i zalety Phalcon
- Doskonała wydajność: Dzięki pracy jako rozszerzenie w C, Phalcon omija narzut analizy i ładowania skryptów PHP, zapewniając wydajność na poziomie natywnym.
- Efektywność zasobów: Bardzo niskie zużycie pamięci, idealny wybór do aplikacji o wysokich wymaganiach wydajnościowych i skalowalności.
- Kompleksowość: Zawiera większość niezbędnych komponentów do tworzenia aplikacji WWW bez konieczności korzystania z bibliotek zewnętrznych.
- Łatwość użycia: Przejrzyste, spójne API i świetna dokumentacja pozwalają łatwo rozpocząć pracę nawet początkującym użytkownikom Phalcon.
- Wysoka modułowość: Każdy komponent jest niezależny – możesz samodzielnie dobrać lub wymienić tylko te, których potrzebujesz.
- Bezpieczeństwo: Oferuje szeroki wybór rozwiązań z zakresu bezpieczeństwa, takich jak filtrowanie wejścia, ochrona przed CSRF itp.
Phalcon to świetny wybór do budowy wydajnych, skalowalnych aplikacji i API, zwłaszcza tam, gdzie liczy się szybkość i efektywność wykorzystania zasobów.
Tworzenie i uruchamianie projektu Phalcon z ServBay
ServBay to lokalne środowisko programistyczne dla macOS, integrujące różne wersje PHP, bazy danych (np. MySQL, PostgreSQL, MongoDB, Redis) oraz serwery WWW (Caddy, Nginx, Apache) i inne narzędzia deweloperskie. Dzięki ServBay z łatwością zbudujesz i zarządzisz środowiskiem do pracy nad projektami Phalcon.
W tym poradniku przeprowadzimy Cię przez utworzenie podstawowego projektu Phalcon w środowisku PHP ServBay, konfigurację serwera WWW i integrację relacyjnej bazy danych (MySQL) oraz bazy NoSQL (Redis).
Wymagania wstępne
Przed rozpoczęciem upewnij się, że spełniasz poniższe kryteria:
- ServBay zainstalowany i uruchomiony: Sprawdź, czy ServBay jest poprawnie zainstalowany i uruchomiony na Twoim macOS.
- Włączona odpowiednia wersja PHP: W ServBay aktywuj wersję PHP, której chcesz użyć w projekcie.
- Aktywny moduł Phalcon: ServBay posiada wbudowany moduł Phalcon, ale domyślnie może być on nieaktywny. Włącz rozszerzenie Phalcon zgodnie z instrukcją w Jak włączyć wbudowany moduł Phalcon w ServBay, po czym zrestartuj usługę PHP.
- Dostępny Composer: ServBay ma wbudowanego Composera, więc nie musisz instalować go ręcznie. Sprawdź, czy w Terminalu możesz uruchomić polecenie
composer
.
Wersje Phalcon i DevTools
Wersje frameworka Phalcon i powiązanych narzędzi developerskich (Phalcon DevTools) muszą być zgodne z wybraną wersją PHP. Poniżej tabela zgodności popularnych wersji PHP z rekomendowanymi wersjami Phalcona i DevTools:
Wersja PHP | Zalecana wersja Phalcon | Zalecana wersja Phalcon DevTools | Uwagi |
---|---|---|---|
PHP 5.6, 7.0, 7.1 | Phalcon 3.4.5 | 3.4.x | |
PHP 7.2, 7.3, 7.4 | Phalcon 4.1.2 | ~4.1 (lub 4.3.x ) | |
PHP 8.0, 8.1, 8.2 | Phalcon 5.x | 5.0.x (oficjalnie) | Możliwe problemy z kompatybilnością DevTools dla PHP 8.x. |
PHP 8.3, 8.4 | Phalcon 5.x | dev-master (repozytorium naprawcze) | Zalecana wersja społecznościowa z poprawkami dla lepszej kompatybilności. |
Ważne: Dla PHP 8.x i wyższych, oficjalne Phalcon DevTools mogą sprawiać problemy. Zalecamy korzystanie z naprawionych wersji społecznościowych. Poniżej znajdziesz instrukcję instalacji DevTools z repozytorium przez Composer.
Tworzenie projektu Phalcon
Zalecana lokalizacja projektu
Dla wygody zarządzania ServBay zaleca umieszczanie wszystkich projektów w domyślnym katalogu głównym: /Applications/ServBay/www
. W przykładach również użyjemy tej ścieżki.
Przejdź do katalogu głównego projektów i utwórz nowy folder
Otwórz Terminal, przejdź do głównego katalogu stron ServBay i utwórz nowy folder na Twój projekt Phalcon, np.
servbay-phalcon-app
:bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3Instalacja Phalcon DevTools
Phalcon DevTools to zestaw linii poleceń do generowania szkieletów kodu, migracji bazy i wielu innych operacji. Instalacja przez Composer różni się w zależności od używanej wersji PHP:
Dla PHP 5.6, 7.0, 7.1 (Phalcon DevTools
^3.4
):bashcomposer require phalcon/devtools:"^3.4"
1Dla PHP 7.2, 7.3, 7.4 (Phalcon DevTools
~4.1
):bashcomposer require phalcon/devtools:"~4.1"
1Dla PHP 8.0, 8.1, 8.2, 8.3, 8.4 (Phalcon DevTools
dev-master
z poprawkami): Oficjalne DevTools mogą nie działać z PHP 8.x, dlatego należy użyć wersji społecznościowej z poprawkami. Najpierw w katalogu projektu (/Applications/ServBay/www/servbay-phalcon-app
) utwórz lub edytuj plikcomposer.json
, dodając odpowiednie repozytorium:json{ "repositories": [ { "url": "https://github.com/daleffe/phalcon-devtools-5.x-fixed.git", "type": "git" } ], "require": { "phalcon/devtools": "dev-master" }, "minimum-stability": "dev", "prefer-stable": true }
1
2
3
4
5
6
7
8
9
10
11
12
13Następnie uruchom Composer:
bashcomposer update
1
Composer utworzy w katalogu projektu (
servbay-phalcon-app
) foldervendor
, a plik wykonywalny DevTools będzie dostępny podvendor/bin/phalcon
.Utwórz szkielet projektu Phalcon przy użyciu DevTools
Użyj DevTools do wygenerowania bazowej struktury plików projektu Phalcon. Katalog z kodem zostanie utworzony w podkatalogu o tej samej nazwie (tak działa domyślne polecenie):
bashvendor/bin/phalcon project servbay-phalcon-app
1To polecenie utworzy w
/Applications/ServBay/www/servbay-phalcon-app
podkatalog/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
z gotową strukturą projektu Phalcon.Przejdź do katalogu z kodem projektu
Dalej kontynuuj pracę w katalogu z kodem:
bashcd servbay-phalcon-app
1Powinieneś znajdować się teraz w
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
.
Konfiguracja środowiska projektu
Konfiguracja projektu Phalcon domyślnie odbywa się w pliku app/config/config.php
. Należy tu ustawić m.in. dane dostępu do bazy danych oraz ścieżki aplikacji.
Edytuj plik konfiguracyjny
Otwórz
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/config.php
w wybranym edytorze. Odnajdź lub dodaj fragment dotyczący bazy danych. W ServBay domyślny użytkownik MySQL/MariaDB toroot
, hasło domyślnie puste, ale dla bezpieczeństwa zalecaną praktyką jest ustawienie silnego hasła. W przykładzie poniżej użyto hasłapassword
jako placeholdera — wpisz tam swoje prawdziwe dane. Nazwa bazyservbay_phalcon_app
posłuży jako przykład — należy ją wcześniej utworzyć.phpreturn new \Phalcon\Config([ // ... inne ustawienia ... 'database' => [ 'adapter' => 'Mysql', // lub 'Postgres' itd. 'host' => '127.0.0.1', 'username' => 'root', // Użytkownik domyślny ServBay 'password' => 'password', // <-- Zmień na swoje hasło do bazy 'dbname' => 'servbay_phalcon_app', // <-- Zmień na swoją bazę ], // ... inne ustawienia ... ]);
1
2
3
4
5
6
7
8
9
10
11Uwaga: Upewnij się, że masz uruchomioną usługę bazy (np. MySQL lub MariaDB) w ServBay i ustawienia bazy (użytkownik, hasło, nazwa) są poprawne. Baza o nazwie
servbay_phalcon_app
musi być utworzona wcześniej np. przez narzędzia jak phpMyAdmin lub Adminer.
Konfiguracja serwera WWW (przez funkcję Strony w ServBay)
Aby udostępnić projekt Phalcon w przeglądarce, musisz skonfigurować odpowiednią stronę w ServBay jako wirtualny host wskazujący na katalog "public" w Twoim projekcie.
- Otwórz aplikację ServBay
- Przejdź do sekcji "Strony": W głównym oknie ServBay kliknij "Strony".
- Dodaj nową stronę: Kliknij przycisk dodawania strony.
- Nazwa: np.
Moja pierwsza strona Phalcon Dev
. - Domena: np.
servbay-phalcon-test.local
. ServBay automatycznie przekaże końcówkę.local
do obsługi lokalnej. - Typ strony: Wybierz
PHP
. - Wersja PHP: Wybierz tę, w której aktywowałeś moduł Phalcon.
- Katalog główny strony: To bardzo ważne — plik
index.php
znajduje się w katalogupublic
, więc wskaż katalog/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
.
- Nazwa: np.
- Zapisz ustawienia: Po zapisaniu ServBay może wymagać restartu serwera WWW (Caddy lub Nginx) — zostaniesz o tym poinformowany.
Szczegóły krok po kroku znajdziesz w Dodawanie pierwszej strony. ServBay automatycznie skonfiguruje domenę lokalną i serwer WWW.
Dodanie przykładowego kodu
Wstawmy prosty kod testowy, by sprawdzić czy projekt działa poprawnie.
Konfiguracja routingu
Edytuj plik
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/routes.php
i dodaj regułę obsługującą żądania pod adres/
:php<?php use Phalcon\Mvc\Router; $router = new Router(false); // Ustawienie domyślnego routingu: mapowanie '/' na IndexController -> indexAction $router->add( '/', [ 'controller' => 'index', 'action' => 'index', ] ); // ... inne reguły routingu ... $router->handle($_SERVER['REQUEST_URI']); return $router;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Stwórz kontroler
Otwórz lub utwórz plik
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/controllers/IndexController.php
i dodaj poniższy kod:php<?php namespace App\Controllers; // Upewnij się, że przestrzeń nazw jest poprawna use Phalcon\Mvc\Controller; class IndexController extends Controller { // Obsługuje żądania pod '/' public function indexAction() { // Zwraca prostą odpowiedź tekstową return 'Hello ServBay!'; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Odwiedź stronę
Po zapisaniu wszystkich plików, upewnij się, że ServBay działa. W przeglądarce przejdź pod skonfigurowaną wcześniej domenę:
https://servbay-phalcon-test.local
Jeśli wszystko skonfigurowałeś poprawnie, zobaczysz komunikat Hello ServBay!
.
Integracja z bazą danych
Phalcon oferuje rozbudowaną warstwę abstrakcji bazy danych i ORM. W ServBay są dostępne różne bazy, które łatwo połączysz z projektem Phalcon. Poniżej przykłady na bazie MySQL i Redis.
Relacyjne bazy danych: przykład z MySQL
Pokażemy, jak połączyć się z MySQL w ServBay i wykonać operacje INSERT/SELECT przy użyciu adaptera Phalcon.
Tworzenie struktury bazy danych (Migracje)
Phalcon DevTools umożliwia pracę z migracjami, czyli wersjonowanie schematu bazy.
Generuj plik migracji: W katalogu projektu (
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
) użyj DevTools:bashvendor/bin/phalcon migration generate
1W folderze
migrations
powstanie nowy plik migracji, np.YYYYMMDDHHMMSS_MigrationName.php
.Edytuj plik migracji: W nowym pliku w metodzie
morph
zdefiniuj przykładową tabelęusers
:php<?php use Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; /** * Class UsersMigration_100 */ class UsersMigration_100 extends Migration // Nazwa klasy powinna odpowiadać nazwie pliku! { /** * Uruchom migrację * * @return void */ public function morph() { $this->morphTable('users', [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'autoIncrement' => true, 'notNull' => true, 'primary' => true, ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, ] ), new Column( 'email', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, 'unique' => true, ] ), ], 'indexes' => [ new Index('PRIMARY', ['id'], 'PRIMARY'), new Index('email_UNIQUE', ['email'], 'UNIQUE'), ], 'options' => [ 'TABLE_ENGINE' => 'InnoDB', 'CHARACTER SET' => 'utf8mb4', 'COLLATE' => 'utf8mb4_unicode_ci', ], ]); } /** * Odwróć migrację * * @return void */ public function down() { // (Opcjonalnie) logika cofania zmian, np. usunięcie tabeli // $this->getConnection()->dropTable('users'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70Uwaga: Zadbaj, by klasa (
UsersMigration_100
) miała tę samą nazwę, co plik migracji (zwykle z timestampem).Uruchom migrację: W katalogu projektu odpal:
bashvendor/bin/phalcon migration run
1Jeśli pojawi się błąd połączenia, sprawdź dane w
app/config/config.php
oraz czy usługa MySQL/MariaDB w ServBay działa.
Konfiguracja połączenia z bazą (omówiona wcześniej)
Sprawdź sekcję
'database'
wapp/config/config.php
— powinna wskazywać na bazę MySQL/MariaDB (domyślnie host127.0.0.1
, port 3306, userroot
, hasło wg. Twoich ustawień).Dodanie przykładowych route'ów
Edytuj plik
app/config/routes.php
, by dodać obsługę inserta/odczytu z bazy:php<?php use Phalcon\Mvc\Router; $router = new Router(false); $router->add('/', [ 'controller' => 'index', 'action' => 'index', ]); // Route do inserta użytkownika $router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); // Route do pobrania użytkowników $router->add( '/mysql', [ 'controller' => 'index', 'action' => 'mysql', ] ); $router->handle($_SERVER['REQUEST_URI']); return $router;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31Implementacja obsługi bazy w kontrolerze
Edytuj plik
app/controllers/IndexController.php
— dodaj metodymysqlAddAction
imysqlAction
:php<?php namespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; // Adapter MySQL use Phalcon\Db\Enum; // Stałe do fetchAll class IndexController extends Controller { public function indexAction() { return 'Hello ServBay!'; } // Przykład inserta użytkownika public function mysqlAddAction() { // Utwórz połączenie (w praktyce lepiej korzystać z DI!) $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Twoje hasło do bazy 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', ]); // Wstaw przykładowego użytkownika $success = $connection->insert( 'users', ['ServBay Demo User', '[email protected]'], ['name', 'email'] ); echo $success ? 'User added successfully.' : 'Failed to add user.'; } // Przykład pobierania listy użytkowników public function mysqlAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Twoje hasło do bazy 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', ]); $users = $connection->fetchAll('SELECT * FROM users', Enum::FETCH_ASSOC); header('Content-Type: application/json'); echo json_encode($users); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53Uwaga: W typowej aplikacji lepiej skonfigurować połączenie z bazą w kontenerze i korzystać z DI.
Test
- W przeglądarce wejdź na
https://servbay-phalcon-test.local/mysql-add
— po sukcesie zobaczysz "User added successfully.". - Wejdź na
https://servbay-phalcon-test.local/mysql
— pojawi się lista użytkowników w formacie JSON z wpisaną wyżej przykładową osobą.
- W przeglądarce wejdź na
Przykład NoSQL: Redis
Przykład użycia usługi Redis z ServBay jako prostego cache’a w projekcie Phalcon.
Upewnij się, że rozszerzenie Redis jest aktywne
W paczkach PHP ServBay standardowo dostępne są popularne rozszerzenia, w tym Redis. Sprawdź, czy masz je włączone w wybranej wersji PHP w ServBay.
Konfiguracja połączenia z Redis
W pliku
app/config/config.php
dodaj fragment z konfiguracją cache'a Redis (Serwery Redis ServBay domyślnie działają na127.0.0.1:6379
):phpreturn new \Phalcon\Config([ // ... inne ustawienia ... 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, // domyślnie 0 'persistent' => false, 'auth' => null, // wpisz hasło jeśli wymagane ], // ... inne ustawienia ... ]);
1
2
3
4
5
6
7
8
9
10
11
12Dodanie trasy demonstracyjnej
W pliku
app/config/routes.php
dodaj route testujący cache Redis:php<?php use Phalcon\Mvc\Router; $router = new Router(false); $router->add('/', [ 'controller' => 'index', 'action' => 'index', ]); $router->add('/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ]); $router->add('/mysql', [ 'controller' => 'index', 'action' => 'mysql', ]); // Route testujący Redis $router->add( '/redis', [ 'controller' => 'index', 'action' => 'redis', ] ); $router->handle($_SERVER['REQUEST_URI']); return $router;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32Użycie Redis w kontrolerze
Edytuj plik
app/controllers/IndexController.php
i dodaj metodęredisAction
:php<?php namespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; use Phalcon\Db\Enum; use Phalcon\Cache\Adapter\Redis; // Adapter Redis Cache use Phalcon\Storage\SerializerFactory; // Fabryka serializerów class IndexController extends Controller { public function indexAction() { return 'Hello ServBay!'; } public function mysqlAddAction() { $connection = new Mysql([/* ... */]); $success = $connection->insert(/* ... */); echo $success ? 'User added successfully.' : 'Failed to add user.'; } public function mysqlAction() { $connection = new Mysql([/* ... */]); $users = $connection->fetchAll('SELECT * FROM users', Enum::FETCH_ASSOC); header('Content-Type: application/json'); echo json_encode($users); } // Przykład użycia cache Redis public function redisAction() { // Utwórz instancję fabryki serializerów $serializerFactory = new SerializerFactory(); // Konfiguracja opcji Redis (zgodna z ustawieniami w config.php) $options = [ 'defaultSerializer' => 'Json', 'lifetime' => 3600, // czas życia cache (sekundy) 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, // 'auth' => 'twoje_haslo_redis', ]; // Stworzenie adaptera $cache = new Redis($serializerFactory, $options); $cacheKey = 'my_servbay_redis_cache_key'; $cachedData = $cache->get($cacheKey); // Pobierz dane z cache if ($cachedData === null) { // Gdy brak danych w cache echo "Data not found in cache, fetching from source..."; $cachedData = 'Data fetched from source: Hello Redis from ServBay!'; $cache->set($cacheKey, $cachedData); echo "Data stored in cache."; } else { // Gdy są dane w cache echo "Data found in cache: "; } // Zwróć dane z cache lub właśnie zapisane return $cachedData; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68Wskazówka: W praktyce najlepiej skonfigurować cache jako usługę we wspólnym kontenerze DI.
Test
Wejdź w przeglądarkę na
https://servbay-phalcon-test.local/redis
.- Przy pierwszym wejściu zobaczysz: "Data not found in cache, fetching from source...Data stored in cache." oraz "Data fetched from source: Hello Redis from ServBay!"
- Przy kolejnych odświeżeniach w trakcie czasu życia cache: "Data found in cache: " oraz "Data fetched from source: Hello Redis from ServBay!" co oznacza, że dane czytane są z Redis.
Częste pytania (FAQ)
- Q: Co zrobić gdy pojawia się błąd 404 Not Found podczas otwierania strony?
- A: Sprawdź, czy w ServBay katalog główny strony wskazuje na katalog
public
w projekcie (/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
). Weryfikuj też, czy wybrany serwer WWW (Caddy/Nginx) działa oraz domena jest poprawnie rozpoznawana lokalnie.
- A: Sprawdź, czy w ServBay katalog główny strony wskazuje na katalog
- Q: Co jeśli pojawia się błąd braku modułu Phalcon (np. Class 'Phalcon\Mvc\Application' not found)?
- A: Oznacza to, że rozszerzenie Phalcon nie jest aktywne w danej wersji PHP. Wróć do panelu ServBay, sprawdź czy wybrana wersja PHP ma aktywny moduł Phalcon, po czym zrestartuj usługę PHP. Wskazówki w Jak włączyć moduł Phalcon w ServBay.
- Q: Jak poradzić sobie z błędami połączenia z bazą?
- A: Sprawdź ustawienia połączenia w
app/config/config.php
(host, użytkownik, hasło, baza). Upewnij się, że usługa bazy działa i użytkownik ma odpowiednie uprawnienia oraz, że baza istnieje.
- A: Sprawdź ustawienia połączenia w
Podsumowanie
Dzięki ServBay możesz łatwo uruchomić środowisko do tworzenia aplikacji w Phalconie na swoim Macu. Ten poradnik prowadzi od zbudowania szkieletu projektu, przez konfigurację serwera WWW, po integrację MySQL i Redis. Zintegrowane narzędzia oraz przejrzysty interfejs ServBay znacząco upraszczają konfigurację i zarządzanie środowiskiem lokalnym, pozwalając skupić się na pisaniu kodu zamiast na konfigurowaniu narzędzi. Mamy nadzieję, że ten przewodnik pomoże Ci szybko zacząć pracę z ServBay i Phalconem oraz rozwinąć swoje projekty webowe!