Nette Documentation Preview

syntax
Создайте своё первое приложение!
********************************

.[perex]
Познакомьтесь с Nette Framework, создавая простой блог с комментариями. Начнём!

После первых двух глав у вас будет собственный работающий блог и вы будете готовы публиковать свои замечательные записи, хотя после этих двух глав возможности будут довольно ограниченными. Прочитайте и следующие главы, в которых мы реализуем добавление комментариев, редактирование записей и, наконец, защиту блога.

.[tip]
Это руководство предполагает, что вы прошли документ [Установка |nette:installation] и успешно настроили свои инструменты. Оно также предполагает, что вы разбираетесь в [объектно-ориентированном программировании на PHP |nette:introduction-to-object-oriented-programming].

Используйте, пожалуйста, PHP 8.1 или новее. Готовое приложение вы найдёте [на GitHub |https://github.com/nette-examples/quickstart/tree/v4.0].


Приветственная страница
=======================

Начнём с создания нового проекта в каталоге `nette-blog`:

```shell
composer create-project nette/web-project nette-blog
```

В этот момент уже должна работать приветственная страница Web Project. Проверьте это, открыв браузер и перейдя по такому URL:

```
http://localhost/nette-blog/www/
```

и вы должны увидеть приветственную страницу Nette Framework:

[* qs-welcome.webp .{url: http://localhost/nette-blog/www/} *]

Приложение работает, и вы можете начать его изменять.

.[note]
Если возникнет проблема, [попробуйте эти несколько советов |nette:troubleshooting#Nette не работает, отображается белая страница].


Содержимое Web Project
======================

У Web Project такая структура:

/--pre
<b>nette-blog/</b>
├── <b>app/</b>              ← каталог приложения
│   ├── <b>Core/</b>         ← базовые необходимые классы
│   ├── <b>Presentation/</b> ← презентеры, шаблоны и компания
│   │   └── <b>Home/</b>     ← каталог презентера Home
│   └── <b>Bootstrap.php</b> ← загрузочный класс Bootstrap
├── <b>assets/</b>           ← исходные ресурсы (SCSS, TypeScript, исходные изображения)
├── <b>bin/</b>              ← скрипты для командной строки
├── <b>config/</b>           ← конфигурационные файлы
├── <b>log/</b>              ← логи ошибок
├── <b>temp/</b>             ← временные файлы, кеш, …
├── <b>vendor/</b>           ← библиотеки, установленные Composer
│   └── <b>autoload.php</b>  ← автозагрузка всех установленных пакетов
└── <b>www/</b>              ← публичная папка, единственное место, доступное из браузера
    ├── <b>assets/</b>       ← скомпилированные статические файлы (CSS, JS, изображения, …)
    └── <b>index.php</b>     ← начальный файл, запускающий приложение
\--

Каталог `www/` предназначен для хранения изображений, файлов JavaScript, стилей CSS и прочих публично доступных файлов. Это единственный каталог, доступный напрямую из интернета, так что задайте document root вашего веб-сервера так, чтобы он указывал сюда (настроить это можно в Apache или Nginx, но сделаем это позже, потому что сейчас это не критично).

Самый важный каталог для вас - `app/`. Здесь вы найдёте файл `Bootstrap.php`, содержащий класс, который загружает фреймворк и настраивает приложение. Он включает [автозагрузку |robot-loader:], настраивает [отладчик |tracy:] и [маршруты |application:routing].


Уборка
======

Web Project содержит приветственную страницу, которую мы уберём, прежде чем начать программировать. Смело замените содержимое файла `app/Presentation/Home/default.latte` на "Hello world!".


[* qs-hello.webp .{url:-} *]


Tracy (отладчик)
================

Чрезвычайно важный инструмент при разработке - [инструмент отладки Tracy |tracy:]. Попробуйте внести ошибку в файл `app/Presentation/Home/HomePresenter.php` (например, уберите фигурную скобку из определения класса `HomePresenter`) и посмотрите, что произойдёт. Появится страница с красным экраном и понятным описанием ошибки.

[* qs-tracy.avif .{url:-}(экран отладчика) *]

Tracy существенно поможет вам при поиске ошибок. Обратите внимание и на плавающую панель Tracy Bar в правом нижнем углу экрана, которая показывает важные сведения о работе приложения.

[* qs-tracybar.webp .{url:-} *]

В продакшн-режиме Tracy, разумеется, выключена и никаких конфиденциальных сведений не показывает. Все ошибки вместо этого сохраняются в каталог `log/`. Попробуем. В файле `app/Bootstrap.php` найдите следующий кусок кода, раскомментируйте строку и измените параметр вызова метода на `false`, чтобы получилось так:

```php .{file:app/Bootstrap.php}
// ...
$this->configurator->setDebugMode(false);
```

После обновления страницы красного экрана вы уже не увидите. Вместо него отобразится понятное пользователю сообщение:

[* qs-fatal.webp .{url:-}(экран ошибки) *]

Теперь загляните в каталог `log/`. Здесь (в файле `exception.log`) вы найдёте записанную ошибку, а также знакомую страницу с сообщением об ошибке (сохранённую как HTML-файл с именем, начинающимся на `exception-`).

Закомментируйте строку `// $this->configurator->setDebugMode(false);` обратно. Tracy автоматически включает режим разработки в окружении `localhost` и выключает его в других местах.

Теперь мы можем исправить внесённую ошибку и продолжить строить приложение.


Отправьте благодарность
=======================

Покажем вам приём, который порадует авторов открытого кода. Вы можете легко поставить на GitHub звезду библиотекам, которые использует ваш проект. Достаточно выполнить:

```shell
composer thanks
```

Попробуйте!

{{priority: -1}}

Создайте своё первое приложение!

Познакомьтесь с Nette Framework, создавая простой блог с комментариями. Начнём!

После первых двух глав у вас будет собственный работающий блог и вы будете готовы публиковать свои замечательные записи, хотя после этих двух глав возможности будут довольно ограниченными. Прочитайте и следующие главы, в которых мы реализуем добавление комментариев, редактирование записей и, наконец, защиту блога.

Это руководство предполагает, что вы прошли документ Установка и успешно настроили свои инструменты. Оно также предполагает, что вы разбираетесь в объектно-ориентированном программировании на PHP.

Используйте, пожалуйста, PHP 8.1 или новее. Готовое приложение вы найдёте на GitHub.

Приветственная страница

Начнём с создания нового проекта в каталоге nette-blog:

composer create-project nette/web-project nette-blog

В этот момент уже должна работать приветственная страница Web Project. Проверьте это, открыв браузер и перейдя по такому URL:

http://localhost/nette-blog/www/

и вы должны увидеть приветственную страницу Nette Framework:

Приложение работает, и вы можете начать его изменять.

Если возникнет проблема, попробуйте эти несколько советов.

Содержимое Web Project

У Web Project такая структура:

nette-blog/
├── app/              ← каталог приложения
│   ├── Core/         ← базовые необходимые классы
│   ├── Presentation/ ← презентеры, шаблоны и компания
│   │   └── Home/     ← каталог презентера Home
│   └── Bootstrap.php ← загрузочный класс Bootstrap
├── assets/           ← исходные ресурсы (SCSS, TypeScript, исходные изображения)
├── bin/              ← скрипты для командной строки
├── config/           ← конфигурационные файлы
├── log/              ← логи ошибок
├── temp/             ← временные файлы, кеш, …
├── vendor/           ← библиотеки, установленные Composer
│   └── autoload.php  ← автозагрузка всех установленных пакетов
└── www/              ← публичная папка, единственное место, доступное из браузера
    ├── assets/       ← скомпилированные статические файлы (CSS, JS, изображения, …)
    └── index.php     ← начальный файл, запускающий приложение

Каталог www/ предназначен для хранения изображений, файлов JavaScript, стилей CSS и прочих публично доступных файлов. Это единственный каталог, доступный напрямую из интернета, так что задайте document root вашего веб-сервера так, чтобы он указывал сюда (настроить это можно в Apache или Nginx, но сделаем это позже, потому что сейчас это не критично).

Самый важный каталог для вас – app/. Здесь вы найдёте файл Bootstrap.php, содержащий класс, который загружает фреймворк и настраивает приложение. Он включает автозагрузку, настраивает отладчик и маршруты.

Уборка

Web Project содержит приветственную страницу, которую мы уберём, прежде чем начать программировать. Смело замените содержимое файла app/Presentation/Home/default.latte на „Hello world!“.

Tracy (отладчик)

Чрезвычайно важный инструмент при разработке – инструмент отладки Tracy. Попробуйте внести ошибку в файл app/Presentation/Home/HomePresenter.php (например, уберите фигурную скобку из определения класса HomePresenter) и посмотрите, что произойдёт. Появится страница с красным экраном и понятным описанием ошибки.

экран отладчика

Tracy существенно поможет вам при поиске ошибок. Обратите внимание и на плавающую панель Tracy Bar в правом нижнем углу экрана, которая показывает важные сведения о работе приложения.

В продакшн-режиме Tracy, разумеется, выключена и никаких конфиденциальных сведений не показывает. Все ошибки вместо этого сохраняются в каталог log/. Попробуем. В файле app/Bootstrap.php найдите следующий кусок кода, раскомментируйте строку и измените параметр вызова метода на false, чтобы получилось так:

// ...
$this->configurator->setDebugMode(false);

После обновления страницы красного экрана вы уже не увидите. Вместо него отобразится понятное пользователю сообщение:

экран ошибки

Теперь загляните в каталог log/. Здесь (в файле exception.log) вы найдёте записанную ошибку, а также знакомую страницу с сообщением об ошибке (сохранённую как HTML-файл с именем, начинающимся на exception-).

Закомментируйте строку // $this->configurator->setDebugMode(false); обратно. Tracy автоматически включает режим разработки в окружении localhost и выключает его в других местах.

Теперь мы можем исправить внесённую ошибку и продолжить строить приложение.

Отправьте благодарность

Покажем вам приём, который порадует авторов открытого кода. Вы можете легко поставить на GitHub звезду библиотекам, которые использует ваш проект. Достаточно выполнить:

composer thanks

Попробуйте!