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>bin/</b>              ← скриптове, стартирани от командния ред
├── <b>config/</b>           ← конфигурационни файлове
├── <b>log/</b>              ← логване на грешки
├── <b>temp/</b>             ← временни файлове, кеш, ...
├── <b>vendor/</b>           ← библиотеки, инсталирани от Composer
│   └── <b>autoload.php</b>  ← autoloading на всички инсталирани пакети
└── <b>www/</b>              ← публична директория - единствената достъпна от браузъра
    └── <b>index.php</b>     ← първоначален файл, чрез който се стартира приложението
\--

Директорията `www/` е предназначена за съхранение на изображения, JavaScript файлове, CSS стилове и други публично достъпни файлове. Само тази директория е достъпна от интернет, така че настройте коренната директория на вашето приложение да сочи точно тук (това можете да настроите в конфигурацията на Apache или nginx, но нека го направим по-късно, сега не е важно).

Най-важната папка за нас е `app/`. Тук намираме файла `Bootstrap.php`, в който има клас, който служи за зареждане на целия framework и настройка на приложението. Тук се активира [autoloading |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:-}(debugger screen) *]

Tracy ще ни помогне изключително много, когато търсим грешки в приложението. Също така забележете плаващия Tracy Bar в долния десен ъгъл на екрана, който съдържа информация от работата на приложението.

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

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

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

След обновяване на страницата вече няма да видим Tracy. Вместо нея ще се покаже удобно за потребителя съобщение:

[* qs-fatal.webp .{url:-}(error screen) *]

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

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

Можем да поправим грешката, която създадохме, и да продължим с писането на приложението.


Изпратете благодарност
======================

Ще ви покажем трик, с който ще зарадвате авторите на софтуер с отворен код. По прост начин можете да дадете звездичка в 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
├── bin/              ← скриптове, стартирани от командния ред
├── config/           ← конфигурационни файлове
├── log/              ← логване на грешки
├── temp/             ← временни файлове, кеш, ...
├── vendor/           ← библиотеки, инсталирани от Composer
│   └── autoload.php  ← autoloading на всички инсталирани пакети
└── www/              ← публична директория - единствената достъпна от браузъра
    └── index.php     ← първоначален файл, чрез който се стартира приложението

Директорията www/ е предназначена за съхранение на изображения, JavaScript файлове, CSS стилове и други публично достъпни файлове. Само тази директория е достъпна от интернет, така че настройте коренната директория на вашето приложение да сочи точно тук (това можете да настроите в конфигурацията на Apache или nginx, но нека го направим по-късно, сега не е важно).

Най-важната папка за нас е app/. Тук намираме файла Bootstrap.php, в който има клас, който служи за зареждане на целия framework и настройка на приложението. Тук се активира autoloading, настройва се дебъгер и маршрути.

Почистване

Web Project съдържа начална страница, която ще изтрием, преди да започнем да програмираме нещо. Без притеснения, следователно, ще заменим съдържанието на файла app/Presentation/Home/default.latte с „Hello world!“.

Tracy (дебъгер)

Изключително важен инструмент за разработка е инструментът за отстраняване на грешки Tracy. Опитайте да предизвикате някаква грешка във файла app/Presentation/Home/HomePresenter.php (напр. като премахнете къдравата скоба в дефиницията на класа HomePresenter) и вижте какво ще се случи. Ще изскочи страница за уведомяване, която описва грешката разбираемо.

debugger screen

Tracy ще ни помогне изключително много, когато търсим грешки в приложението. Също така забележете плаващия Tracy Bar в долния десен ъгъл на екрана, който съдържа информация от работата на приложението.

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

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

След обновяване на страницата вече няма да видим Tracy. Вместо нея ще се покаже удобно за потребителя съобщение:

error screen

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

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

Можем да поправим грешката, която създадохме, и да продължим с писането на приложението.

Изпратете благодарност

Ще ви покажем трик, с който ще зарадвате авторите на софтуер с отворен код. По прост начин можете да дадете звездичка в GitHub на библиотеките, които вашият проект използва. Достатъчно е да стартирате:

composer thanks

Опитайте!