Tworzenie i uruchamianie projektu Yii 2 w ServBay
Przegląd: czym jest Yii 2?
Yii 2 to wysoko wydajny, komponentowy framework PHP przeznaczony do szybkiego tworzenia nowoczesnych aplikacji internetowych. Opiera się na wzorcu MVC (Model-View-Controller) i oferuje bogaty zestaw funkcji i narzędzi, które pomagają programistom w efektywnym budowaniu skalowalnych i niezawodnych aplikacji. Framework zyskał popularność dzięki świetnej wydajności, elastycznej architekturze oraz wbudowanym rozwiązaniom takim jak system cache, bezpieczeństwo czy wsparcie dla RESTful API.
Kluczowe cechy i zalety Yii 2
- Wysoka wydajność – Yii 2 jest zoptymalizowany do obsługi dużej liczby równoczesnych żądań, co idealnie sprawdza się w przypadku wymagających aplikacji.
- Modułowa budowa – Umożliwia przejrzyste organizowanie kodu i wielokrotne używanie komponentów.
- Bezpieczeństwo – Framework posiada wbudowane funkcje zabezpieczające, takie jak walidacja danych wejściowych, filtrowanie wyjścia, ochrona CSRF/XSS, autoryzacja i uwierzytelnianie.
- Łatwość użycia – Proste i przejrzyste API oraz obszerna dokumentacja ułatwiają szybkie rozpoczęcie pracy.
- Wsparcie społeczności – Posiada aktywną społeczność programistów oraz bogaty katalog rozszerzeń.
- Narzędzia integracyjne – Wbudowane narzędzia CLI do migracji baz danych, generowania kodu i innych zadań wspierają szybki rozwój projektu.
Yii 2 doskonale sprawdza się przy tworzeniu aplikacji korporacyjnych, RESTful API czy portali internetowych.
Jak uruchomić projekt Yii 2 z ServBay
ServBay to lokalne środowisko web deweloperskie stworzone z myślą o macOS i Windows. Integruje technologie takie jak PHP, różne bazy danych (MySQL, PostgreSQL, MongoDB, Redis), serwery webowe (Caddy, Nginx) oraz szereg narzędzi programistycznych (Composer, Node.js, Python, Go, Java itd.), zapewniając szybki start i prostotę obsługi.
W tym przewodniku pokażemy, jak wykorzystać PHP, Composer oraz usługi bazodanowe ServBay do utworzenia i uruchomienia podstawowej aplikacji Yii 2. Skonfigurujemy lokalny serwer web poprzez funkcję „strony” ServBay i zaprezentujemy podstawowe funkcje projektu.
Wymagania wstępne
Przed rozpoczęciem upewnij się, że:
- Zainstalowałeś i uruchomiłeś ServBay na macOS lub Windows.
- W ServBay masz zainstalowaną i aktywną odpowiednią wersję PHP (np. PHP 8.3 lub wyższą).
- W ServBay masz zainstalowane i aktywowane potrzebne bazy danych (MySQL lub PostgreSQL) oraz usługi cache (Memcached, Redis).
Wszystkie zainstalowane pakiety i ich status znajdziesz na głównym ekranie ServBay.
Tworzenie projektu Yii 2
TIP
ServBay zaleca przechowywanie plików projektu w następujących katalogach, co pozwala zachować porządek i ułatwia zarządzanie przez funkcję „strony”:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer – ServBay zawiera już wbudowane narzędzie Composer, nie musisz instalować go osobno. Komendy
composer
są dostępne od razu w terminalu.Tworzenie katalogu projektu – Otwórz terminal, przejdź do domyślnego katalogu stron ServBay i utwórz nowy folder projektu.
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Tworzenie projektu z Composer – Będąc w katalogu
servbay-yii2-app
, uruchom polecenie Composer, aby stworzyć szablon aplikacji bazowej Yii 2:bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Polecenie pobierze szablon Yii 2 oraz zależności do bieżącego katalogu (
.
). Poczekaj na pobranie i instalację.Przejście do katalogu projektu – Upewnij się, że jesteś w głównym katalogu projektu przed wykonywaniem dalszych poleceń.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app
1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app
1
Konfiguracja początkowa
Po utworzeniu projektu Yii 2, konieczna jest podstawowa konfiguracja, szczególnie połączenie z bazą danych i ustawienia komponentów.
Konfiguracja połączenia z bazą danych: Edytuj plik
config/db.php
w katalogu głównym projektu. W zależności od wybranej bazy danych (MySQL lub PostgreSQL) i jej ustawień w ServBay (domyślnie: użytkownikroot
, hasłopassword
; o ile nie zmieniono konfiguracji), zaktualizuj dane dostępowe.Najpierw utwórz nową bazę danych do projektu, na przykład o nazwie
servbay_yii2_app
, korzystając z Adminer dostępnego w ServBay lub innego klienta (Sequel Ace, TablePlus itd.). Adminer znajdziesz w zakładce baz danych aplikacji ServBay.Dla MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname to nazwa utworzonej bazy danych 'username' => 'root', // nazwa użytkownika bazy danych 'password' => 'password', // hasło bazy danych 'charset' => 'utf8mb4', // zalecane kodowanie 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 to utworzona baza, port domyślnie 5432 'username' => 'root', // nazwa użytkownika 'password' => 'password', // hasło bazy 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // domyślne schema w PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Zmień ustawienia w pliku
config/db.php
odpowiednio do swojej konfiguracji.Konfiguracja cache oraz Redis: Edytuj plik
config/web.php
w katalogu głównym projektu i dodaj/modyfikuj sekcjęcomponents
, aby skonfigurować Memcached i Redis. Domyślny port Memcached to11211
, Redis –6379
.php<?php // ... inne ustawienia 'components' => [ // ... inne 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 Redis ], // ... inne komponenty ], // ... pozostałe ustawienia
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 w ServBay uruchomione są usługi Memcached i Redis. Do użycia Redis jako cache wymagany jest pakiet
yiisoft/yii2-redis
(Composer instaluje bazowe zależności przy tworzeniu projektu; jeśli czegoś brakuje, użyjcomposer require yiisoft/yii2-redis
). Memcached korzysta zyiisoft/yii2-memcached
, podstawowy szablon może mieć już te zależności.
Konfiguracja serwera WWW (Strony ServBay)
Skorzystaj z funkcji „strony” ServBay, aby skonfigurować lokalny serwer WWW (Caddy lub Nginx) dla projektu Yii 2.
- Uruchom aplikację ServBay
- Przejdź do ustawień stron – znajdź i kliknij sekcję „Strony” lub podobną w interfejsie ServBay.
- Dodaj nową stronę – kliknij znak
+
lub przycisk „Dodaj”. - Wypełnij informacje o stronie:
- Nazwa – podaj nazwę np.
My First Yii 2 Dev Site
. - Domena – np.
servbay-yii2-test.local
. ServBay automatycznie skonfiguruje DNS na127.0.0.1
. - Typ strony – wybierz
PHP
. - Wersja PHP – wybierz żądaną wersję, np.
8.3
(musi być zainstalowana i aktywna w ServBay). - Katalog główny strony – bardzo ważne! Dla aplikacji bazowej Yii 2 wejściem publicznym jest katalog
web
w projekcie:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web
- Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- Nazwa – podaj nazwę np.
- Zapisz i zastosuj – zapisz konfigurację i pozwól, aby ServBay przeładował ustawienia serwera WWW.
Szczegóły procesu znajdziesz w oficjalnej dokumentacji ServBay: Dodawanie pierwszej strony.
ServBay automatycznie wyda i zaufa certyfikatowi SSL dla Twojej domeny (przez ServBay User CA lub ServBay Public CA), więc możesz korzystać z HTTPS.
Dodaj przykładowy kod do demonstracji funkcji
Aby pokazać, jak działa baza danych i cache, dodajemy przykładowe akcje do domyślnego kontrolera Yii 2.
Edytuj plik controllers/SiteController.php
i dodaj poniższe metody do klasy SiteController
:
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. Pobraną wartość: " . $value);
} else {
return $this->asText("Nie udało się zapisać danych w Memcached. Sprawdź konfigurację i usługę Memcached.");
}
}
/**
* Przykład użycia Redis.
*
* @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. Pobraną wartość: " . $value);
} else {
return $this->asText("Nie udało się zapisać danych w Redis. Sprawdź konfigurację i usługę Redis.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Błąd Redis: " . $e->getMessage() . ". Sprawdź konfigurację i usługę Redis.");
}
}
/**
* Przykład dodania użytkownika do bazy danych.
* Wymaga istnienia tabeli 'users'.
*
* @return Response
*/
public function actionMysqlAdd() // Działa także dla PostgreSQL przy odpowiedniej konfiguracji
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Nazwa użytkownika powiązana z marką
'email' => 'demo-user@servbay.test', // E-mail powiązany z marką
])->execute();
return $this->asText("Użytkownik dodany pomyślnie. Liczba dodanych 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 danych, konfigurację i czy tabela 'users' istnieje.");
}
}
/**
* Przykład pobierania użytkowników z bazy.
* Wymaga istnienia tabeli 'users'.
*
* @return Response
*/
public function actionMysql() // Działa także dla PostgreSQL przy odpowiedniej konfiguracji
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Formatowanie outputu, by nie zwracać bezpośrednio wrażliwych pól lub chaotycznych danych
$output = "Pobrani użytkownicy:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Imię: {$user['name']}, E-mail: {$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 danych, konfigurację i czy tabela 'users' istnieje.");
}
}
// Używając PostgreSQL, możesz dodać osobne metody action, choć zazwyczaj korzystasz z jednego komponentu db
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Formatowanie outputu jako tekst zwykły.
* @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 outputu 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
W actionMysqlAdd
oraz actionMysql
dodano obsługę błędów i poprawiono formatowanie wyjścia dla czytelności. Wartości użytkownika i adres e-mail dobrano zgodnie z marką ServBay.
Edytuj plik widoku views/site/index.php
(odpowiadający akcji actionIndex
). Możesz pozostawić domyślną treść 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 = 'Moja aplikacja Yii2 na ServBay'; // Aktualizacja tytułu
?>
<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">Zacznij korzystać z Yii</a></p>
</div>
<div class="body-content">
<h2>Prezentacje</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Przetestuj Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Przetestuj Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Dodaj użytkownika do bazy</a> (Wymagana tabela 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Pobierz użytkowników z bazy</a> (Wymagana tabela 'users')</li>
</ul>
<p>Upewnij się, że usługi Memcached, Redis oraz wybrana baza danych (MySQL/PostgreSQL) są uruchomione w ServBay i poprawnie skonfigurowane w plikach `config/web.php` oraz `config/db.php`.</p>
<p>Dla przykładu bazy danych należy utworzyć tabelę 'users' za pomocą migracji Yii (patrz poniż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
Dodano odnośniki do widoku, pozwalając na szybkie przetestowanie nowo dodanych akcji w kontrolerze.
Baza relacyjna: tworzenie struktury tabeli (migracja)
Aby przykłady (actionMysqlAdd
, actionMysql
) działały, musisz utworzyć tabelę users
w bazie danych. Yii zaleca zarządzanie schematem bazy przez migracje.
Utworzenie pliku migracji z konsoli – W katalogu głównym projektu uruchom polecenie Yii Console, aby wygenerować plik migracji.
Ścieżka katalogu głównego projektu:
- macOS:
/Applications/ServBay/www/servbay-yii2-app
- Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table
1Potwierdź
yes
, aby utworzyć plik w katalogumigrations
. Nazwa pliku będzie podobna domYYYYMMDD_HHMMSS_create_users_table.php
.- macOS:
Edycja pliku migracji – Otwórz wygenerowany plik migracji i zdefiniuj strukturę tabeli w metodzie
up()
: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}} dla wsparcia prefiksu tabel '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: załóż indeks dla lepszej wydajności zapytań $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true oznacza indeks unikalny ); } /** * {@inheritdoc} */ public function down() { // Usuń indeks $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Usuń tabelę $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 wygenerowaną nazwę pliku.Uruchom migrację – W głównym katalogu projektu uruchom polecenie w konsoli, które utworzy tabelę według definicji z metody
up()
:bashphp yii migrate
1Potwierdź
yes
. Jeśli wszystko przebiegnie pomyślnie, zobaczysz informację o utworzeniu tabeli.
Testowanie strony projektu
Otwórz przeglądarkę i przejdź pod skonfigurowaną domenę, np. https://servbay-yii2-test.local
.
- Pod adresem
https://servbay-yii2-test.local
zobaczysz domyślną stronę powitalną aplikacji oraz odnośniki demonstracyjne. - Link "Przetestuj Memcached" lub adres
https://servbay-yii2-test.local/index.php?r=site/memcached
– jeśli Memcached jest poprawnie uruchomiony i skonfigurowany, pojawi się komunikat "Memcached zapisano pomyślnie...". - Link "Przetestuj Redis" lub adres
https://servbay-yii2-test.local/index.php?r=site/redis
– analogicznie, dla Redis. - Link "Dodaj użytkownika do bazy" lub adres
https://servbay-yii2-test.local/index.php?r=site/mysql-add
– jeśli baza danych jest gotowa i jest tabelausers
, zobaczysz "Użytkownik dodany pomyślnie...". - Link "Pobierz użytkowników z bazy" lub adres
https://servbay-yii2-test.local/index.php?r=site/mysql
– wyświetli pobranych użytkowników z tabeliusers
.
W razie problemów sprawdź w ServBay, czy wszystkie wybrane serwisy (PHP, serwer WWW, baza danych, Memcached, Redis) są aktywne i czy pliki konfiguracyjne projektu (config/db.php
, config/web.php
) są poprawnie ustawione. Upewnij się, że tabela w bazie jest utworzona.
FAQ – Najczęściej zadawane pytania
- Dlaczego przy wejściu na stronę pojawia się błąd dostępu lub certyfikatu? Sprawdź, czy domena jest poprawnie dodana w ustawieniach strony ServBay i czy aplikacja ServBay działa. ServBay automatycznie konfiguruje lokalny DNS i certyfikat SSL. W przypadku błędów certyfikatu, upewnij się, że zaufałeś ServBay User CA lub Public CA. Szczegóły w dokumentacji ServBay.
- Polecenia Composer nie działają? Sprawdź, czy w aplikacji ServBay aktywowany jest pakiet Composer i czy polecenia uruchamiasz w terminalu macOS lub Windows. ServBay automatycznie dołącza Composer do ścieżki PATH.
- Połączenie z bazą danych nie działa? Skontroluj, czy usługa bazy (MySQL/PostgreSQL) w ServBay jest aktywna. Sprawdź ustawienia
dsn
,username
,password
w plikuconfig/db.php
. Upewnij się, że bazaservbay_yii2_app
została utworzona. Połącz się przez Adminer, by to sprawdzić. - Memcached/Redis nie łączą się? Upewnij się, że odpowiednie serwisy są aktywne w ServBay, a w pliku
config/web.php
podano właściwehost
iport
(domyślnie:127.0.0.1
i właściwy port). - Migracja bazy (
php yii migrate
) nie działa? Sprawdź, czy plikconfig/db.php
jest poprawnie ustawiony, baza funkcjonuje i została utworzona. Migracja wymaga aktywnego połączenia z bazą. - Dlaczego akcje
actionMysqlAdd
/actionMysql
zwracają błąd braku tabeli? Musisz najpierw wykonać migrację bazy poleceniemphp yii migrate
, aby utworzyć tabelęusers
. - Jak sprawdzić logi błędów PHP? ServBay centralizuje logi błędów PHP, serwera WWW itd. Szczegóły znajdziesz w zakładce „Logi” aplikacji ServBay.
Podsumowanie
ServBay pozwala bez trudu skonfigurować kompleksowe lokalne środowisko deweloperskie na macOS i Windows dla projektów Yii 2. Wbudowany Composer, zarządzanie wersjami PHP, integracja z bazą oraz cache i wygodna konfiguracja stron WWW znacząco upraszczają pracę nad projektami Yii 2. Postępując zgodnie z tym przewodnikiem, szybko wystartujesz z własnym projektem Yii 2 i skorzystasz z narzędzi oferowanych przez ServBay.
Powodzenia w tworzeniu!