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-стилей и других общедоступных файлов. Только этот каталог доступен из интернета, поэтому настройте корневой каталог вашего приложения так, чтобы он указывал именно сюда (это можно настроить в конфигурации 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:-} *]

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

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

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

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

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

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

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


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

Мы покажем вам трюк, которым вы порадуете авторов open source. Простым способом вы можете поставить звездочку на GitHub библиотекам, которые использует ваш проект. Достаточно запустить:

```shell
composer thanks
```

Попробуйте!

{{priority: -1}}
{{sitename: Nette Quickstart}}

Пишем первое приложение!

Давайте познакомимся с 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-стилей и других общедоступных файлов. Только этот каталог доступен из интернета, поэтому настройте корневой каталог вашего приложения так, чтобы он указывал именно сюда (это можно настроить в конфигурации 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 в правом нижнем углу экрана, который содержит информацию о выполнении приложения.

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

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

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

экран ошибки

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

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

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

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

Мы покажем вам трюк, которым вы порадуете авторов open source. Простым способом вы можете поставить звездочку на GitHub библиотекам, которые использует ваш проект. Достаточно запустить:

composer thanks

Попробуйте!