Tworzenie i uruchamianie projektu Yii 2 w ServBay
Wprowadzenie: Czym jest Yii 2?
Yii 2 to wydajny, oparty na komponentach framework PHP przeznaczony do szybkiego tworzenia nowoczesnych aplikacji internetowych. Realizuje wzorzec MVC (Model-View-Controller) i oferuje kompletny zestaw narzędzi oraz funkcji, które umożliwiają efektywne budowanie skalowalnych, wysokiej jakości aplikacji webowych. Yii 2 jest popularny ze względu na świetną wydajność, elastyczną architekturę i potężne funkcje wbudowane, takie jak cache, bezpieczeństwo, wsparcie dla RESTful API i wiele innych.
Najważniejsze cechy i zalety Yii 2
- Wysoka wydajność: Yii 2 został zoptymalizowany do obsługi dużej liczby równoczesnych żądań, idealny do projektów wymagających szybkiego działania.
- Modułowa architektura: Framework jest wysoce modułowy, co ułatwia organizację kodu i ponowne używanie komponentów.
- Bezpieczeństwo: Zawiera szereg wbudowanych mechanizmów bezpieczeństwa, m.in. walidację danych wejściowych, filtrowanie wyjść, ochronę przed CSRF/XSS oraz rozbudowany system autoryzacji i uwierzytelniania.
- Przyjazność dla użytkownika: Proste i intuicyjne API oraz rozbudowana dokumentacja sprawiają, że rozpoczęcie pracy z Yii 2 jest szybkie i wygodne.
- Wielka społeczność: Aktywny ekosystem społecznościowy i bogata biblioteka rozszerzeń umożliwia szybkie znalezienie pomocy w razie potrzeby.
- Zintegrowane narzędzia: Dostarcza narzędzia CLI do migracji bazy danych, generowania kodu i innych zadań zwiększających wydajność pracy.
Yii 2 to świetny wybór do budowania aplikacji klasy enterprise, RESTful API, portali i wielu innych typów projektów webowych.
Uruchamianie projektu Yii 2 w ServBay
ServBay to środowisko deweloperskie stworzone specjalnie dla macOS. Integruje PHP, różne bazy danych (np. MySQL, PostgreSQL, MongoDB, Redis), serwery WWW (Caddy, Nginx) oraz inne narzędzia deweloperskie, takie jak Composer, Node.js, Python, Go czy Java. Jego celem jest zapewnienie programistom wygodnej i gotowej do użycia platformy do tworzenia aplikacji WWW.
W tym przewodniku dowiesz się, jak utworzyć i uruchomić aplikację bazową Yii 2, korzystając ze środowiska PHP wbudowanego w ServBay, narzędzia Composer oraz dostępnych usług bazodanowych. Skorzystamy z funkcji „Strony WWW” w ServBay, aby skonfigurować lokalny serwer i przetestować działanie Twojego projektu.
Wymagania wstępne
Przed rozpoczęciem upewnij się, że:
- Pomyślnie zainstalowałeś i uruchomiłeś ServBay na macOS.
- W ServBay masz zainstalowaną i aktywowaną odpowiednią wersję PHP (np. PHP 8.3 lub nowszą).
- W ServBay masz wybraną bazę danych (np. MySQL lub PostgreSQL) oraz serwisy cache (Memcached i Redis) – zainstalowane i włączone.
Listę zainstalowanych pakietów oraz ich stan możesz sprawdzić w głównym ekranie ServBay.
Tworzenie projektu Yii 2
TIP
ServBay zaleca, aby pliki projektowe umieszczać w katalogu /Applications/ServBay/www
. Pozwala to zachować czytelność struktury katalogów i łatwo zarządzać stronami przez funkcję „Strony WWW” w ServBay.
Composer: ServBay zawiera Composer – nie musisz instalować go osobno. Komendę
composer
możesz od razu wywołać w terminalu.Tworzenie katalogu projektu: Otwórz terminal, przejdź do domyślnego katalogu root stron ServBay i utwórz nowy katalog na projekt.
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Tworzenie projektu Yii 2 przez Composer: W katalogu
servbay-yii2-app
uruchom poniższą komendę Composer, by utworzyć bazowy szablon aplikacji Yii 2.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1To polecenie pobierze szablon Yii 2 Basic i wszystkie wymagane zależności do bieżącego katalogu (
.
). Cierpliwie poczekaj, aż Composer zakończy pobieranie i instalację.Wejście do katalogu projektu: Upewnij się, że znajdujesz się w katalogu root projektu
/Applications/ServBay/www/servbay-yii2-app
. Wszystkie kolejne komendy wykonuj właśnie tutaj.bashcd /Applications/ServBay/www/servbay-yii2-app
1
Konfiguracja początkowa
Po utworzeniu projektu Yii 2, należy wykonać podstawową konfigurację, szczególnie dotyczącą połączenia z bazą danych oraz komponentów.
Konfiguracja połączenia do bazy danych: Edytuj plik
config/db.php
znajdujący się w katalogu root projektu. W zależności od wybranej bazy danych (MySQL lub PostgreSQL) oraz jej ustawień (domyślnie użytkownik toroot
, hasłopassword
, chyba że zmienione), zaktualizuj parametry połączenia.Najpierw utwórz w wybranym serwisie bazodanowym w ServBay nową bazę dla projektu – np. o nazwie
servbay_yii2_app
. Możesz to zrobić korzystając z Adminer (dostępny z poziomu ServBay) lub dowolnego innego klienta (Sequel Ace, TablePlus itp.).Dla MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname – nazwa nowej bazy danych 'username' => 'root', // nazwa użytkownika bazy danych 'password' => 'password', // hasło do bazy danych 'charset' => 'utf8mb4', // zalecane do obsługi pełnego zestawu znaków ];
1
2
3
4
5
6
7
8
9Dla PostgreSQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=servbay_yii2_app', // dbname – nowa baza, port zwykle 5432 'username' => 'root', // nazwa użytkownika bazy danych 'password' => 'password', // hasło do bazy danych 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // domyślne schema PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Wybierz odpowiednią konfigurację i dopasuj plik
config/db.php
.Konfiguracja cache i komponentu Redis: Otwórz plik
config/web.php
w katalogu projektu. Dodaj lub zmodyfikuj sekcjęcomponents
, aby skonfigurować Memcached oraz Redis. Domyślny port Memcached w ServBay to11211
, zaś Redis –6379
.php<?php // ... inne ustawienia 'components' => [ // ... istniejące komponenty (np. request, cache, user, errorHandler, log, urlManager) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // domyślny port Memcached 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // domyślny port Redis 'database' => 0, // indeks bazy w Redis ], // ... inne komponenty ], // ... pozostała konfiguracja
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
28Upewnij się, że Memcached i Redis zostały uruchomione w ServBay. Pamiętaj, że do użycia Redis jako cache potrzebujesz pakietu
yiisoft/yii2-redis
(Composer zwykle instaluje to przy tworzeniu projektu, ale można go dodać ręcznie:composer require yiisoft/yii2-redis
). Podobnie dla Memcached – zazwyczajyiisoft/yii2-memcached
jest już uwzględniony.
Konfiguracja serwera WWW (Strony WWW ServBay)
W ServBay możesz dodać nową stronę WWW, która wskazuje na Twój projekt Yii 2 i korzysta z wybranego serwera (Caddy lub Nginx).
- Uruchom ServBay: Otwórz aplikację ServBay.
- Przejdź do ustawień stron: W interfejsie ServBay znajdź sekcję „Strony WWW” lub podobną.
- Dodaj nową stronę: Kliknij przycisk dodawania strony (zwykle
+
lubDodaj
). - Uzupełnij dane strony:
- Nazwa: Wpisz czytelną nazwę, np.
My First Yii 2 Dev Site
. - Domena: Wprowadź domenę do pracy lokalnej, np.
servbay-yii2-test.local
. ServBay automatycznie skonfiguruje lokalny DNS kierując tę domenę na127.0.0.1
. - Typ strony: Wybierz
PHP
. - Wersja PHP: Wybierz zainstalowaną, odpowiednią wersję PHP (np.
8.3
). - Katalog główny strony: To bardzo istotne – dla aplikacji Yii 2 Basic wejściem publicznym jest katalog
web
w root projektu. Ustaw więc:/Applications/ServBay/www/servbay-yii2-app/web
.
- Nazwa: Wpisz czytelną nazwę, np.
- Zapisz i zastosuj: Zapisz konfigurację strony. ServBay automatycznie przeładuje ustawienia serwera WWW.
Więcej szczegółów znajdziesz w dokumentacji ServBay: Dodawanie pierwszej strony WWW.
ServBay automatycznie wygeneruje i zaufa certyfikatom SSL dla domen lokalnych (przez ServBay User CA lub ServBay Public CA). Dzięki temu możesz korzystać z HTTPS podczas pracy lokalnej.
Dodanie przykładowego kodu demonstrującego funkcjonalność
Aby zaprezentować obsługę bazy danych i cache, możesz dodać kilka akcji do domyślnego kontrolera Yii 2.
Otwórz plik controllers/SiteController.php
i w klasie SiteController
dodaj poniższe metody:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Import klasy wyjątku bazy danych
class SiteController extends Controller
{
/**
* Wyświetla stronę główną.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Przykład użycia Memcached.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Cache na 60 sekund
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached zapisano pomyślnie. Pobranie wartości: " . $value);
} else {
return $this->asText("Nie udało się zapisać danych w Memcached. Sprawdź usługę Memcached i konfigurację.");
}
}
/**
* Przykład użycia Redisa.
*
* @return Response
*/
public function actionRedis()
{
$redis = Yii::$app->redis;
$key = 'my_redis_test_key';
$data = 'Hello Redis from ServBay!';
try {
if ($redis->set($key, $data)) {
$value = $redis->get($key);
return $this->asText("Redis zapisano pomyślnie. Pobranie wartości: " . $value);
} else {
return $this->asText("Nie udało się zapisać danych w Redis. Sprawdź usługę Redis i konfigurację.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Błąd Redis: " . $e->getMessage() . ". Sprawdź usługę Redis i konfigurację.");
}
}
/**
* Przykład dodawania użytkownika do bazy danych.
* Wymaga istnienia tabeli 'users'.
*
* @return Response
*/
public function actionMysqlAdd() // Działa również z PostgreSQL po odpowiedniej konfiguracji
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Nazwa demo powiązana z marką
'email' => '[email protected]', // Email demo powiązany z marką
])->execute();
return $this->asText("Użytkownik dodany pomyślnie. Liczba zmienionych wierszy: " . $count);
} catch (DbException $e) {
return $this->asText("Nie udało się dodać użytkownika do bazy. Błąd: " . $e->getMessage() . ". Sprawdź usługę bazy, konfigurację oraz czy istnieje tabela 'users'.");
}
}
/**
* Przykład pobierania użytkowników z bazy danych.
* Wymaga istnienia tabeli 'users'.
*
* @return Response
*/
public function actionMysql() // Działa również z PostgreSQL po odpowiedniej konfiguracji
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Sformatowany output, aby nie zwracać wrażliwych danych lub nieczytelnych wyników
$output = "Pobrani użytkownicy:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Imię: {$user['name']}, Email: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Nie udało się pobrać użytkowników z bazy. Błąd: " . $e->getMessage() . ". Sprawdź usługę bazy, konfigurację oraz czy istnieje tabela 'users'.");
}
}
// Jeśli korzystasz z PostgreSQL, możesz dodać osobne metody action, ale zwykle wystarczy użyć komponentu db
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Formatowanie wyjścia jako tekst.
* @param string $text
* @return Response
*/
protected function asText($text)
{
Yii::$app->response->format = Response::FORMAT_RAW;
Yii::$app->response->getHeaders()->add('Content-Type', 'text/plain');
return $text;
}
/**
* Formatowanie wyjścia jako JSON.
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Zwróć uwagę: w metodach actionMysqlAdd
i actionMysql
dodano obsługę błędów i poprawiono czytelność zwróconych komunikatów. Nazwy demo są zgodne z polityką marki ServBay.
Edytuj plik views/site/index.php
, który jest powiązany z metodą actionIndex
. Możesz zostawić domyślną zawartość lub ją zmodyfikować:
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'My Yii2 Application on ServBay'; // Zmieniony tytuł
?>
<div class="site-index">
<div class="jumbotron">
<h1>Gratulacje!</h1>
<p class="lead">Pomyślnie utworzyłeś aplikację Yii2 i skonfigurowałeś ją z ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Rozpocznij z Yii</a></p>
</div>
<div class="body-content">
<h2>Demonstracje</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Testuj Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Testuj Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Dodaj użytkownika do bazy</a> (wymaga tabeli 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Pobierz użytkowników z bazy</a> (wymaga tabeli 'users')</li>
</ul>
<p>Upewnij się, że usługi Memcached, Redis i wybrana baza danych (MySQL/PostgreSQL) są uruchomione w ServBay oraz poprawnie skonfigurowane w plikach `config/web.php` i `config/db.php`.</p>
<p>Dla przykładowych operacji na bazie danych musisz utworzyć tabelę 'users' przy użyciu migracji Yii (patrz niżej).</p>
</div>
</div>
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
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
W widoku dodano linki umożliwiające testowanie nowych akcji kontrolera.
Relacyjna baza danych: tworzenie struktury tabeli (migracje)
Aby testować metody takie jak actionMysqlAdd
i actionMysql
, należy najpierw utworzyć tabelę users
w bazie danych. Framework Yii poleca użycie migracji do zarządzania zmianami w strukturze bazy.
Tworzenie pliku migracji przy użyciu Gii: Otwórz terminal, upewnij się że jesteś w katalogu root
/Applications/ServBay/www/servbay-yii2-app
, i uruchom komendę generującą plik migracji:bashphp yii migrate/create create_users_table
1Zostaniesz poproszony o potwierdzenie, wpisz
yes
i naciśnij Enter. W katalogumigrations
pojawi się nowy plik PHP, np.mYYYYMMDD_HHMMSS_create_users_table.php
.Edycja pliku migracji: Otwórz wygenerowany plik migracji i w metodzie
up()
zdefiniuj strukturę tabeliusers
:php<?php use yii\db\Migration; /** * Tworzy tabelę `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX to znacznik czasu { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // użycie {{%users}} obsługuje prefiksy (jeśli skonfigurowano) 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'email' => $this->string()->notNull()->unique(), 'created_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP'), 'updated_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), ]); // Opcjonalnie: tworzenie indeksu dla wydajności $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true oznacza indeks unikalny ); } /** * {@inheritdoc} */ public function down() { // Usunięcie indeksu $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Usunięcie tabeli $this->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
46Zmień
mXXXXXXXXXXXXXX_create_users_table
na rzeczywistą nazwę pliku generowaną przez Yii.Wykonanie migracji: Będąc w katalogu projektu, uruchom migrację w terminalu:
bashphp yii migrate
1Po potwierdzeniu operacji (wpisz
yes
), tabelausers
zostanie utworzona zgodnie z definicją.
Przeglądanie strony i testowanie
Teraz możesz uruchomić przeglądarkę i przejść do skonfigurowanej przez siebie domeny, np. https://servbay-yii2-test.local
.
- Odwiedź
https://servbay-yii2-test.local
: zobaczysz ekran powitalny aplikacji Yii 2 oraz linki do demonstracji, które dodaliśmy wviews/site/index.php
. - Kliknij "Testuj Memcached" lub przejdź pod
https://servbay-yii2-test.local/index.php?r=site/memcached
: jeśli usługa Memcached działa poprawnie, zobaczysz komunikat "Memcached zapisano pomyślnie..." w formie tekstowej. - Kliknij "Testuj Redis" lub przejdź pod
https://servbay-yii2-test.local/index.php?r=site/redis
: jeśli Redis działa prawidłowo, pojawi się komunikat "Redis zapisano pomyślnie...". - Kliknij "Dodaj użytkownika do bazy" lub przejdź pod
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: jeśli baza działa, konfiguracja jest prawidłowa i tabelausers
istnieje (po wykonaniu migracji) — pojawi się informacja o dodanym użytkowniku. - Kliknij "Pobierz użytkowników z bazy" lub przejdź pod
https://servbay-yii2-test.local/index.php?r=site/mysql
: jeśli konfiguracja jest poprawna, zobaczysz listę użytkowników z tabeliusers
.
W przypadku napotkania problemów, sprawdź czy odpowiednie usługi (PHP, serwer WWW, baza danych, Memcached, Redis) są uruchomione w ServBay, konfiguracja projektu Yii 2 (config/db.php
, config/web.php
) jest prawidłowa oraz czy tabela bazy danych została poprawnie utworzona.
Najczęściej zadawane pytania (FAQ)
- Dlaczego domena nie działa lub pojawia się błąd certyfikatu? Upewnij się, że domena została poprawnie dodana w ustawieniach stron w ServBay, a sama aplikacja ServBay jest uruchomiona. ServBay automatycznie konfiguruje lokalny DNS i SSL, ale w przypadku błędów certyfikatu sprawdź, czy zaufałeś Certyfikatowi ServBay User CA lub ServBay Public CA. Szczegóły w dokumentacji ServBay.
- Komenda Composer nie działa? Sprawdź, czy Composer został włączony w ServBay, a komendy wykonujesz z poziomu terminala macOS. ServBay automatycznie dodaje Composer do zmiennej PATH.
- Problem z połączeniem do bazy danych? Zweryfikuj, czy baza (MySQL/PostgreSQL) jest uruchomiona w ServBay. Sprawdź parametry
dsn
,username
,password
wconfig/db.php
. Upewnij się także, że bazaservbay_yii2_app
została utworzona (możesz to zrobić np. przez Adminer). - Brak połączenia z Memcached/Redis? Sprawdź, czy usługa Memcached/Redis jest uruchomiona w ServBay. Parametry
host
iport
wconfig/web.php
powinny odpowiadać domyślnym (127.0.0.1
i właściwe porty). - Niepowodzenie migracji bazy danych (
php yii migrate
)? Upewnij się, żeconfig/db.php
jest poprawnie ustawiony, baza pracuje, a baza została utworzona. Migracje wymagają aktywnego połączenia. - Dlaczego
actionMysqlAdd
/actionMysql
wskazuje brak tabeli? Najpierw uruchom migracjephp yii migrate
, aby utworzyć tabelęusers
. - Gdzie znaleźć logi błędów PHP? ServBay centralizuje logi PHP, serwera WWW itp. Przejdź do sekcji „Logi” w ServBay, aby przejrzeć pełne logi i szybciej zdiagnozować problem.
Podsumowanie
ServBay pozwala błyskawicznie skonfigurować kompletne środowisko programistyczne na macOS do uruchamiania projektów Yii 2. Komponenty takie jak Composer, zarządzanie wersjami PHP, wbudowane bazy danych i cache oraz prosta konfiguracja stron WWW znacząco upraszczają pracę. Dzięki temu przewodnikowi rozpoczniesz szybko swoją przygodę z Yii 2, wykorzystując możliwości ServBay do maksimum.
Powodzenia i miłej pracy!