Главная страница

Развитие языков программирования растёт с большой скоростью


Скачать 2.79 Mb.
НазваниеРазвитие языков программирования растёт с большой скоростью
АнкорKostern
Дата28.04.2022
Размер2.79 Mb.
Формат файлаpdf
Имя файлаKostelny_PHP-Junior-Kit.644079.pdf
ТипДокументы
#503693
страница12 из 14
1   ...   6   7   8   9   10   11   12   13   14

My beauty title


And here some text.

");
//…
?>

PHP: Junior Kit
260
Конечно же, файлы можно прикреплять не по указанной отдельной переменной, но также сразу же создав объект прямо в функции, или по url адресу:
//…
$message->attach(
Swift_Attachment::fromPath("path_to/image.
jpg", "image/jpg");
); // Прикрепляем изображение прямо в функции
$message->attach(
Swift_Attachment::fromPath("https://exampl e.com/image.jpg");
); // Прикрепляем изображение по URL-адресу
//…
?>
Ну что же ещё можно сказать об контенте добавляемым пользователем? Мы знаем, как можно прикреплять файлы, добавлять
HTML-код в сообщение. Что же можно ещё сделать? Надо немного поговорить об безопасности и об том как создавать рассылку данных.
17.3
Создание рассылки
А что будем делать если нам надо будет разослать какие-то письма с информацией нескольким людям а не только одному человеку?
Для этого мы должны будем передать массив из адресами почтовых ящиков в функцию для тех кто получает сообщение:
// …
$message->sendTo([
"email1@example.com" => "Super Recipient",
"address@example.com",

PHP: Junior Kit
261
"email2@example.com" => "Nice Recipient"
]);
// …
?>
Заметьте что второй элемент массива который мы передаем - не имеет значения, то есть имени которое мы можем дать. В такой способ можно разработать систему рассылки в своем приложении. То есть просто брать из базы данных целый массив с адресами электронных адресов и передавать их на управление функции. Такое же самое можно сделать и с электронными адресами для отправителя.
То есть электронные письма можно посылать прямо из нескольких электронных адресов. Но а что же можно сказать об безопасности в Swiftmailer? Есть ли средства которые смогут защитить посылаемые сообщения? Конечно же, что есть! Например, можно с легкостью создавать сертификаты прямо к сообщениям:
$message = new Swift_Message();
$smimeSigner = new Swift_Signers_SMimeSigner();
// Создаем объект генератора сертификатов
$smimeSigner->setSignCertificate
("path/to/certificate.pem", "path/to/private- key.pem"); // Указываем путь к сертификату и приватному ключу
$message->attachSigner($smimetSinger); //
Прикряпляем сертификат
?>
Как вы видите то здесь надо обязательно указать сертификат и приватный ключ если мы хотим прикрепить наш сертификат/электронную подпись. Если вы хотите рассмотреть больше

PHP: Junior Kit
262
функционала Swiftmailer то можете заглянуть в официальную документацию по адресу: https://swiftmailer.symfony.com/docs/index.html
А сейчас же мы поговорим об том как можно реализовать отправку электронных писем с помощью РНР средств. На этом мы долго застревать не будем.
17.
4 РНР Средства
Для того чтобы мы могли использовать РНР средства для отправки электронных писем то для начала нам надо будет настроить файл конфигурации РНР - php.ini. Нам надо будет добавить несколько строчек кода конфигурации. Чтобы мы могли настроить наш РНР под
SMTP нам надо найти такие строчки кода в файле конфигурации:
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP=localhost
; http://php.net/smtp-port smtp_port=25
; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = me@example.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =
В моем файле конфигурации РНР эти строчки кода находяться на таких адресах 1056-1069. вы видите здесь переменную SMTP которая имеет значение localhost.

PHP: Junior Kit
263
В этой переменной как вы смогли понять то оно хранит название
SMTP сервера, который отвечает за функции электронной почты. Дальше идет переменная smpt_port которая хранит в себе имя порта сервера.
Здесь в этих переменных мы можем указать также параметры для сервиса
Gmail. Дальше вы можете заметить переменную sendmail_from которая хранит в себе значение имя почтового ящика, с которого будут отправляться электронные письма.
Хорошо, после того как мы настроили наш файл конфигурации то мы можем переходить к тому чтобы начинать писать первый небольшой скрипт для того чтобы можно отправлять электронные письма с помощью
РНР средств. То есть будет форма, через которую мы будем вводить данные и отсылать их потом. Параметры эти настроены, если мы будем использовать РНР без настраивания сервера через РНР. Конечно же, подключиться к SMTP серверу можно и через РНР скрипт. Подключение к SMTP серверу через РНР-скрипт будет вам немного напоминать скрипт подключения к БД.
Вот сам скрипт:
$send_to = "user12345678@example.com";
$subject = "Здесь тема сообщения";
$message = "Привет! Как дела?";
$headers = array(
"From" => "supermike@example.com",
"Reply-to" => "supermike@example.com",
"X-Mailer” => «яPHP/" . phpversion()
); mail($send_to, $subject, $message, $headers);
?>
Для того чтобы отправить сообщение мы воспользовались функцией mail(). Но кроме этого мы задали несколько параметров, первый это кому мы хотим отослать сообщение, второй параметр это тема

PHP: Junior Kit
264
сообщения, третий параметр само сообщение и четвертый это массив внутри которого содержаться заголовки с параметрами для запроса. Это довольно таки простой способ использования РНР средств, для того чтобы отсылать сообщения. Функция mail() использовала те данные для отсылки сообщения, которые были указаны в файле конфигурации
РНР.
Думаю некоторые вспомнят что я говорил об том, что можно подключаться к SMTP серверу на чистом РНР, и при этом не редактируя файла конфигурации РНР. Скажу правду, в предыдущем разделе я вам не показывал то, как можно подключаться к SMTP серверу через чистый
РНР, а все потому что написание скрипта который подключался к SMTP серверу - это очень сложно.
Поскольку вообще для того чтобы подключиться к SMTP серверу надо указать все параметры заголовков, а также уйму других параметров и для этого надо много времени. А также новичку будет довольно таки сложно понять код для подключения. Но если кому-то интересно, то может найти информацию об этом.
Но все-таки, если вы хотите использовать РНР средства для того чтобы отсылать электронные письма - то все таки лучше настраивать файл конфигурации чтобы было легче работать. На этом я завершу этот раздел, и дальше мы перейдем к более серьезной теме. А пока что давайте сделаем заключение об то что мы изучили в данном разделе.
Заключение
Использование РНР для того чтобы отправлять электронные письма, позволяет сделать автоматизацию рассылки каких-то сообщений, например рассылку пользователям приложения. Если использовать
Swiftmailer то работа сократиться в несколько раз. Кроме этой библиотеки вы можете найти кучу других библиотек, которые вы можете использовать для облегчения отправки электронных писем с помощью использования РНР.

PHP: Junior Kit
265
Конечно же существует большая куча веб-приложений которые можно использовать с легкостью для того чтобы создавать рассылку, даже не умея программировать. Но возможно все равно кому-то понадобится сделать в своем приложении функцию, повязанную с отправкой электронных писем. На этом я завершаю данный подраздел, и как всегда я попрошу читателя ответить на вопросы и выполнить упражнения которые находятся ниже.
Вопросы и упражнения для самоконтроля
1. Как установить библиотеку Swiftmailer?
2. Какие есть параметры для того чтобы подключиться к SMTP серверу?
3. Наведите пример сервисов к которым можно подключаться через
SMTP?
4. Напишите программу с использованием Swiftmailer, которая разослала бы нескольким людям письмо с темой “Hello world!”, и с таким же содержанием.
5. Какие есть функции для того чтобы присвоить определенны данные для сообщения? Например, заголовок или содержание письма.
6. Как можно прикреплять файлы к сообщению с помощью
Swiiftmailer?
7. Как можно сделать отправку электронных писем на чистом РНР?
8. Какие есть переменные в файле конфигурации РНР для того чтобы настроить SMTP для РНР?

PHP: Junior Kit
266 18 PHP и тестирование
Качество кода это важно. От этого может зависеть очень много факторов. К примеру, скорость работы скрипта. В этом разделе мы поговорим об том как можно тестировать свое приложение написанное на php. Есть множество библиотек, которые также позволяют делать тесты для своего кода.
Для реализации тестов мы будем использовать фреймворк
PHPUnit. PHPUnit - это один из самых популярных PHP фреймворков для того чтобы тестировать свое приложение. Если кто то забыл что такое фреймворк, или просто не знает, то это набор библиотек и инструментов для того чтобы разрабатывать своё приложение. Фреймворк это как бы сказать готовый каркас на котором разрабатывается приложение.
18.1 Установка
Для начала давайте установим PHPUnit. Вы можете перейти на официальный сайт по ссылке: https://phpunit.de/. Думаю, вы смогли догадаться что устанавливать данный фреймворк мы будем с помощью пакетного менеджера composer.

PHP: Junior Kit
267
Ссылка на страницу с инструкцией установки: https://phpunit.de/getting-started/phpunit-7.html.
Давайте установим этот фреймворк, воспользовавшись данной командой в пакетном менеджере: composer require --dev phpunit/phpunit ^7
Хочу заметить, что в конце данной команды мы указали то что мы хотим использовать версию которая выше 7. После установки мы можем начинать его использовать, главное только не забыть подключить фреймворк к приложению.
18.2
Первый тест
У нас будет класс Book, который мы будем тестировать. Вот содержание кода класса, он имеет только одну функцию, которую мы протестируем с помощью PHPUnit:
{ return $a + $b;
}
}
?>
Класс вышел очень примитивным, но суть заключается в том чтобы просто его протестировать и понять как работают тесты в PHPUnit.
Как вы видите то здесь мы создали функцию, которая выполняет операцию сложения двух чисел a и b. Вот как создается тест для данного класса:

PHP: Junior Kit
268
PHPUnit_Framework_TestCase { private $book; protected function setUp()
{
$this->book = new Book();
} protected function tearDown()
{
$this->book = NULL;
} public function testData() // Функция которая будет тестировать функцию в нашем классе
{
$test = $this->book->sumData(5, 4);
$this->assertEquals(9, $test);
// Проверяем правильность вывода
}
}
?>
Теперь смотрите, здесь есть 2 функции которые отвечают за включение/выключение теста. Первой функцией являеться функция

PHP: Junior Kit
269
setUp() которая создает новый объект класса, который мы хотим протестировать.
Дальше идет функция tearDown(), которая уже выключает тест, при этом давая значение NULL локальной переменной $book, которая содержит в себе объект тестируемого класса. Последняя функция в нашем тесте, это функция, которая как раз и тестирует функцию в нашем классе.
Вы можете заметить что здесь есть переменная $test которая как раз и тестирует функцию sumData(). Мы передаем определенные параметры нашей функции для того чтобы её протестировать, после этого мы обращаемся к классу PHPUnit_Framework_TestCase(), использовав при этом функцию assertEquals().
Функция assertEquals(), проверяет, вернул ли правильное значение наша функция sumData() в переменной $test. В нашем случае вы можете заметить, что мы проверяем, правильно ли значение которое должно быть равно числу 9. А теперь что бы запустить тест нам надо ввести данную команду: phpunit BookTest.php
Здесь мы указываем имя файла, который является тестом, написанным на PHPUnit. После этого вы сможете увидеть результат теста, который выведется в консоль. Лог который выведет консоль будет содержать информацию об скорости выполнения скрипта. Кроме того что мы получаем информацию об скорости выполнения скрипта, мы также получаем информацию об том сколько было использовано оперативной памяти РНР для выполнения данного скрипта.
Вот какой у меня был вывод результат:
PHPUnit
7.3 by
Sebastian
Bergmann and contributors.
Time: 114 ms, Memory: 12.0Mb
OK (1 test, 1 assertion)

PHP: Junior Kit
270
Думаю, вы заметили, сообщение которое в конце результата которое сообщает об том, что был проведен 1 тест и 1 проверка данных, а также что все прошло успешно. А давайте рассмотрим с вами тест, который не был пройден успешно? Т.е. посмотрим, как выглядит ошибка при не успешном тесте. Для этого просто достаточно добавить неправильное значение в новой функции при проверке данных:
… class BookTest extends
PHPUnit_Framework_TestCase {
… public function badTest() {
$result = $book->sumData(5, 5);
$this->assertEquals(9, $result);
}
}
?>
После того как мы попытаемся выполнить тест то получим в результате сообщение что в тесте было неправильное значение и что тест был проведен не успешно:
PHPUnit
7.3 by
Sebastian
Bergmann and contributors.
.F
Time: 130 ms, Memory: 12Mb
There was 1 failure:
1) BookTest::badTest
Failed asserting that 9 matches expected 10.

PHP: Junior Kit
271
BookTest.php: 30
FAILURES!
Tests: 2, Assertions: 2, Failures: 1.
Можете заметить, что в конце сообщения показано что произошёл один неудачный тест. Вы может прямо сейчас попробовать написать собственную функцию, которая будет выполнять определенную операцию, и при этом, когда вы будете писать собственный тест, то вы можете добавить в него собственную проверку работы теста.
18.3 Data Provider
Представьте, что нам надо будет проверять много значений и делать много тестов. Чтобы не создавать много функций для тестов надо воспользоваться data provider’ом, например, вот как выглядит типичный код, в котором много тестов с проверкой значений:
… class BookTest extends
PHPUnit_Framework_TestCase {
… public function test1()
{
$result = $this->book->sumData(2,
4);
$this->assertEquals(6, $result);
} public function test2()
{
$result = $this->book->sumData(3,
6);

PHP: Junior Kit
272
$this->assertEquals(9, $result);
} public function test3()
{
$result = $this->book->sumData(4,
10);
$this->assertEquals(14, $result);
}
}
?>
Вы видите, что здесь данные функции занимают много места, а также они могут использовать больше оперативной памяти. Поэтому для того чтобы не “изобретать велосипед”, давайте создадим Data Provider - т.е. провайдер данных, который как раз и предоставит все эти значения одному тесту чтобы не приходилось использовать много места. И при этом будут сделаны тесты с проверкой значений, которые были указаны в провайдере данных.
Вот код класса уже с нашим провайдером данных:
… class BookTest extends
PHPUnit_Framework_TestCase {
… public function addProvider()
{ return array(
[3, 4, 7],
[4, 15, 19],
[6, 10, 16],
);
}

PHP: Junior Kit
273
/**
* @dataProvider addProvider
*/
// Заметьте то в какой способ мы добавляем
// провайдер данных к тестовой функции, public function testData($a, $b,
$expected)
{
$result = $this->book->sumData($a,
$b);
$this->assertEquals($expected,
$result);
}
}
?>
Заметьте что в функции, которая создаёт тест, имеет 3 локальные переменные. Две первые переменные это переменные, которые имеет функция, которую мы хотим с вами протестировать. Последней локальной переменной, является переменная, которая проверяет значение в функции assertEquals().
Как вы уже смогли понять, то просто передаем данной функции массив из данными которые содержатся в нашем провайдере данных.
После этого с помощью локальных переменных, которые используются в функции для создания теста, мы выполняем работу функции которую хотим протестировать, после чего проверяем на правильность значения.
Как вы видите то использовать провайдеры данных хорошо, если мы хотим сделать большое количество тестов, а также не нагружать работу скрипта.

PHP: Junior Kit
274 18.4
Больше методов для написания тестов
Кроме того что мы можем проверять правильность значения в тестах, можно также и проверять наличие значения с помощью функции assertNotEmpty():
… class MyTest extends PHPUnit_Framework_TestCase
{
… public function newTest()
{
$this->assertEquals("TRUE", $value);
$this->assertNotEmpty($value);
}
}
?>
Можно также проверить проверку значения на то равно ли оно истине или нет с помощью функции assertTrue():
… class MyTest extends PHPUnit_Framework_TestCase
{ public function test()
{
$this->assertTrue(false);
// Если мы попробуем сделать тест то получим
// конечно же ошибку, поскольку мы даём

PHP: Junior Kit
275
// занчение которое равно ложи, а не истине
}
}
?>
Или вот ещё пример, вот функция для теста, которая проверяет существование определенной папки - assertDirectoryExists():
… class MyTest extends PHPUnit_Framework_TestCase
{
… public function mytest()
{
$this->assertDirectoryExists
("/path/to/directory");
}
}
?>
Я могу описать ещё здесь просто кучу методов которые вы можете использовать для того чтобы писать собственные тесты, но лучше зайти на официальный сайт PHPUnit с документацией, и самому найти метод который вас интересует.
Ссылка на документацию: https://phpunit.de/documentation.html.
На этом моменте мы завершаем данный раздел, и делаем заключение об том что мы выучили за этот раздел.

PHP: Junior Kit
276
Заключение
Тестирование приложения важный процесс, который отвечает за качество вашего продукта.
Тестировать можно по многим характеристикам, как например время выполнения скрипта или то сколько использует программа оперативной памяти для выполнения определенной операции. В этом разделе вы научились то как можно делать простые тесты, если вы хотите больше узнать об том как можно тестировать приложения то можете заглянуть в официальную документацию или даже посмотреть книгу, которая есть на сайте разработчиков.
Там вы сможете найти больше информации об том как писать тесты. Вообще созданием тестов и тестированием программы занимается человек, которого называют тестировщиком или QA. Это также ещё одна отрасль в IT сфере, которая может заинтересовать читателя. Моим заданием было показать вам основы написания тестов, а не нагружать вас большим объемом информации об том, как можно создать тест для какого-нибудь большого класса внутри которого около 20 функций, и код данного класса занимает 1000 строчек.
Для вас сейчас главное это получить знания Junior’a, т.е младшего разработчика. А дальше уже вы сможете ещё больше развиваться и создавать более динамичные, и сложные приложения. Самым лучшим способом получить больше знаний программированию это будет работать над каким-то реальным проектом. А также посещать какие-нибудь конференции, которые на тему программирования. Никакая книга в мире не сможет просто взять и сделать из человека супер-разработчика. Есть много вещей, которые можно научиться только с опытом. Чтобы стать хорошим разработчиком надо делать реальные проекты и иметь чёткую цель создания чего-то, а также развития навыка разработчика.
Кроме того что в данном разделе вы научились то как можно писать простые тесты, вы также имели первый опыт с фреймворками. В следующих разделах мы также поговорим об том какие есть РНР

PHP: Junior Kit
277
фреймворки для создания приложений с уже готовым набором библиотек и инструментов. Как и в каждом конце раздела, я попрошу читателя ответить на вопросы и выполнить упражнения, которые находятся в конце раздела.
Вопросы и упражнения для самоконтроля
1. PHPUnit фреймворк или библиотека?
2. Что надо для того чтобы написать тест?
3. Какая функция служит для того чтобы проверить правильность значения выполненной другой функцией?
4. Какие данные мы получаем после завершения теста?
5. Что может привести к ошибке в тестировании?
6. Напишите тест который проверял бы файл по таким характеристикам как: читабельность (readable) и возможность редактирования(writeable). Для того чтобы найти нужные вам функции в документации по функциях тестов PHPUnit. Ссылка на документацию: http://phpunit.readthedocs.io/en/7.1/assertions
.html
7. Напишите программу, которая бы делала тест на строки.
Проверку можете сделать по желаемым качествам, главное чтобы вы воспользовались документацией для того чтобы найти нужные вам функции.

PHP: Junior Kit
278 19 Фреймворки
Я уже как то упомянул в этой книге об фреймворках. Если кто не помнить что это такое, то я напомню, фреймворк - это набор библиотек и инструментов, которые позволяют создавать приложение не “изобретая велосипед”, а также во многом облегчают разработку приложения.
В этом разделе мы поговорим с вами об там какие существуют
РНР фреймворки, как выбрать себе подходящий, а также поработает с одним из фреймворков - Symfony. Symfony - это простой фреймворк, который годиться для того чтобы изучать его как первый фреймворк.
19.1
Какие существуюь РНР фреймворки?
Существует много
РНР фреймворков которые можно использовать для разработки собственного приложения. На данный момент самыми популярными фреймворками являются: Laravel, Phalcon,
Symfony, CakePHP, CodeIgniter и Yii2. Это целых 6 популярных фреймворков, это круто, но это не значит что вам придеться учить каждый. Хотя это уже зависит от вашего желания. Вы можете учить столько фреймворков сколько вы хотите. Но какой же стоит выбрать?
Самым популярным фреймворком считается Laravel, на рис. 42 вы можете увидеть логотип данного фреймворка.
-
Рис. 42 - Логотип фреймворка Laravel

PHP: Junior Kit
279
Вообще выбор фреймворка зависит от того какую задачу нам надо решить. Так же само и с библиотеками. Но в общем можно использовать любой фреймворк для создания приложения, главное чтобы данный фреймворк имел все те нужные инструменты для создания приложения.
Для новичка вообще надо для начала понять, как вообще выглядит создание приложения с помощью фреймворка. Первое что надо будет вообще понять любому новичку который изучает свой первый фреймворк
- это понять что такое MVC паттерн, и как он работает в фреймворке. А также хочу добавить, что кроме понимания данного паттерна разработчику надо также будет знать об разных шаблонах проектирования.
Но сейчас мы говорим об фреймворках в общем. Т.е. новичку надо понять общую картину того как создаются приложения на фреймворках. Поэтому в следующем подразделе мы обговорим общее понятия об фреймворках, а также установим фреймворк Symfony.
19.2 Общее понятия
Многие фреймворки используют паттерн об котором я говорил выше. То есть MVC паттерн, аббревиатура расшифровывается как Model-
View-Controller(Модель Вид Контроллер). Объясню, как эта работает система. У нас есть 3 компонента, которых я назвал выше. Каждый из них отвечает за определенную часть в приложении. Внизу показан список, в котором указано что и за что отвечает каждый компонент паттерна:
● Model - этот компонент который отвечает за запросы к базе данных, а также за таблицы. То есть отвечает за структуры таблиц.
● View - это компонент который отвечает за внешний вид приложения. То есть это файлы внешнего вида.
● Controller - этот компонент который уже отвечает за работу страниц. Например контроллер может маршрутизацию страниц и за то что будет происходит на странице.

PHP: Junior Kit
280
Все эти элементы работают между собой, и внизу я показал вам схему которая объяснят работу данного паттерна:
-
Рис. 43 - Схема поясняющая работу MVC паттерна
По схема вы видите что пользователь посылает данные контроллеру, который потом передает указания модели, после чего модель передает указания компоненту отвечающему за отображение внешнего вида(интерфейса). Но вообще контроллер дает указания компоненту, отвечающему за отображение интерфейса - о том что именно надо отображать. С этого можно понять, что благодаря тому что пользователь взаимодействует с элементами внешнего вида, он может посылать данные контроллеру который потом обрабатывает эти данные и передает другим компонентам.
Объясню теперь больше о том как это будет выглядеть во время того как мы будем создавать приложение на фреймворке. Мы будем
Model
Controller
View
Пользователь

PHP: Junior Kit
281
отдельно создавать контроллер, который будет отвечать за определенный функционал в нашем приложении. Например, пусть будет отвечать за создание постов.
Кроме контроллера, нам надо будет создать модель, которая будет отвечать за посты в базе данных. А дальше уже мы создадим отдельные файлы, которые будут хранить в себе код отображения определенного внешнего интерфейса. Это, например, могут быть веб-страницы. В вашем приложении может быть столько контроллеров, моделей и шаблонов, столько вам будет нужно и столько, сколько вы захотите. Количество контроллеров, моделей и шаблонов зависит уже от функционала приложения. Как я уже и говорил, то самым лучшим способом показать это будет на примере фреймворка. Поэтому в следующем разделе речь будет о фреймворке Symfony.
19.3
Фреймворк Symfony
На данный момент новейшей версий Symfony является версия 4.1.
Именно её мы будем использовать на наших примерах. Фреймворк
Symfony поддерживает компания SensioLabs из Франции. А теперь давайте перейдем к установке фреймворка, для этого просто введем команду с помощью пакетного менеджера: composer create-project symfony/website-skeleton my- app
В конце команды вы можете заметить что мы вводим название нашего приложения, в нашем случае это my-app. После того как
Symfony установиться вы сможете перейти в папку со своим приложениям и начать создавать его на готовой основе. Для примера чтобы читатель мог понять, как работает MVC паттерн на практике, мы будем создавать простой примитивный блог для создания/редактирования/просмотра и удаления постов.

PHP: Junior Kit
282
Давайте перейдем в командой строке в папку с нашим приложением, и для того чтобы протестировать работает ли все у нас, давайте запустим локальный сервер Symfony для нашего приложения: php bin/console server:run
Немного объясню, как работает данная команда. С помощью РНР мы обращаемся к папке bin которая находиться в папке нашего приложения, дальше идет обращение к консоли Symfony через файл console который как раз и находиться в папке bin. И только потом после того как мы обратились к консоли мы можем набрать команду которую хотим выполнить. В нашем примере мы запускаем локальный сервер с помощью команды server:run. Давайте вернемся к нашей командной строке.
После того как вы запустите локальный сервер, у вас должно выведется сообщение о том на каком хосте был запущен локальный сервер Symfony:
-
Рис. 44 - Сообщение в командной строке о том что локальный
сервер Symfony был запущен
Если у вас появилось данное сообщение, то вы уже можете перейти в браузер и посмотреть на первую страницу, которая установлена по умолчанию. Если же у вас не появилось такого сообщения, подождите, поскольку процесс запуска локального сервера иногда может занять некоторое время. А вот как выглядит первая приветствующая страница в вашем приложении, когда вы не вносили никаких изменений:

PHP: Junior Kit
283
-
Рис. 45 - Страница созданная по умолчанию в приложении после
установки Symfony
На странице вы можете увидеть какая у вас установлена версия
Symfony, а также то по какому адресу находиться ваше приложение в файловой система вашего компьютера. Кроме этого есть ссылка на документацию Symfony где можно найти инструкции по созданию своего первого приложения. Если вам надо будет остановить локальный сервер
Symfony то воспользуйтесь комбинацией клавиш Ctr+C.
Внизу на скриншоте вы можете увидеть внизу большое темное поле. Это profiler данного фреймворка, он позволяет делать откладку кода сразу же. И это уже в несколько раз нам облегчает работу. Поскольку с помощью данного профайлера мы можем узнать очень много информации о том, как работает скрипт. Например, сколько времени идет на генерацию внешнего вида страницы, сколько оперативной памяти использует РНР, сколько времени тратит скрипт на то чтобы сделать определенные запросы к базе данных.
Можно узнать очень много информации. Для этого достаточно перейти на отдельную страницу профайлера, где пишет вся информация

PHP: Junior Kit
284
об том, как работает приложение. Чтобы перейти на страницу профайлера кликните слева внизу:
-
Рис. 46 - Небольшой кусочек вида профайлера в Symfony.
После этого вы перейдете в профайлер где сможет найти очень много информации об работе HTTP в вашем приложении. Но давайте вернемся к нашему приложению, и поговорим об том, что мы будем делать дальше. Вообще об профайлере я сделаю отдельный подраздел в этом разделе. В первую очередь нам надо будет разобраться с файловой системой приложения, и узнать какая папка за что отвечает. Вот как выглядит файловая система приложения на Symfony(фото слева).
Вы можете здесь увидеть ту самую папку об которой я вам говорил, то есть bin. Мы её никогда не трогаем, это системная папка для того чтобы работать с консолью.
Дальше идет папка config, в которой размещаются файлы конфигурации, об которых мы скоро поговорим. Дальше идет уже папка public ,внутри которой уже хранятся файлы конфигурации, когда уже приложение будет поставлено на полностью рабочий сервер.
Следующей папкой является папка src, внутри которой хранятся контроллеры, модели,

PHP: Junior Kit
285
структуры таблиц баз данных, миграции баз данных и репозитории.
-
Рис. 47 - Структура папок в приложении созданном на Symfony
Внутри данной папке есть 4 папки с такими названиями:
● Controller - папки с контроллерами.
● Entity - модели приложения, а точнее файл с описанием структур таблиц.
● Migrations - миграции баз данных.
● Repository - репозитории баз данных.
Если вы загляните в данные папки, то там ничего не будет, кроме файлов игнорирования системы контроля версий Git. Двигаемся дальше, и следующей папкой у нас является папка templates, в которой хранятся шаблоны приложения. В нашем случае там уже есть один шаблон, который был установлен по умолчанию после установки
Symfony. После этой папки идет папка tests, в ней храняться тесты к приложению. И вот почти последняя папка – translations, внутри которой хранятся файлы с переводами языков страниц нашего приложения.
Последней папкой является папка vendor которую мы также никогда не трогаем, поскольку в данной папке как вы уже смогли догадаться хранятся все библиотеки и инструменты для разработки приложения. Теперь, когда я объяснил какие папки за что отвечают, переходим к конфигурации базы данных для нашего приложения.
19.
4 Создание блога
Для того чтобы настроить наше приложение на базы данных, нам надо открыть файл env который находиться в корневой папке. После этого в конце файла введите такую строку:
DATABASE_URL=“mysql://db_user:db_password@127.0.0.1:3 306/db_name

PHP: Junior Kit
286
Теперь объясню что это за параметры. Вы видите что здесь есть переменная DATABASE_URL которой мы как раз и присваиваем параметры сервера баз данных. Первым параметром является db_user - это логин пользователя MySQL, db_password - пароль пользователя
MySQL.
Дальше после символа @ идет адрес и порт сервера баз данных. В нашем случае адресом есть 127.0.0.1 и портом является 3306. И в конце есть параметр db_name c названием базы данных, которую мы хотим использовать в нашем приложении. После того как я вам рассказал за что какие параметры отвечают, возьмите и замените их, на параметры вашего локального сервера баз данных. Также рекомендую вам создать отдельную базу данных для вашего приложения.
Теперь после того как вы настроили приложение на ваш локальный сервер баз данных, надо начинать создавать наш первый контроллер. Наш контроллер будет называться PostController, поэтому в папке Controller создайте файл PostController.php:
// Сверху мы подключаем компоненты Symfony
// которые будут использовать в приложении class PostController {
/* Ниже делаем маршрутизацию для нашей первой страницы, то есть указываем какой она будет

PHP: Junior Kit
287
иметь адрес в адресной строке чтобы перейти на неё
*/
* @Route("/", name="list")
*/ public function indexAcion()
{ return new Response("Index page");
// С помощью создания нового объекта класса
// Response, делаем ответ на странице
// при входе на неё
}
}
?>
На первый взгляд может показаться, что мы только что просто создали новый класс. Так оно и есть, но поскольку мы указали пространство имен так, что данный класс находиться в папке для контроллеров, а также подключили нужные для нас компоненты - то это уже не класс, а контроллер Symfony.
Чтобы система зарегистрировала данный класс в системе как контроллер, мы должны указать в пространстве имен, что это контроллер.
Мы это сделали в начале файла. Дальше после того как мы указали пространство имен, мы подключили все нужные компоненты Symfony, которые будут использоваться в нашем контроллере.
Мы подключили только 2 компонента которые нам понадобиться для того чтобы наш контроллер мог нормально работать для начала.
Первым компонентом который мы подключили, является компонент
Response который нам понадобился для того чтобы мы могли сделать ответ когда пользователь перейдет на нашу первую страницу.

PHP: Junior Kit
288
Следующий компонент который мы подключили, понадобился нам для того чтобы мы могли задать маршрут для нашей первой страницы. Этим компонентом является компонент Route. Дальше после подключения компонентов, мы создали сам класс нашего контроллера.
Заметьте что название нашего класса такое же самое как и название файла. Теперь после этого мы создали первую функцию, которая отвечает за главную страницу. С помощью компонента Route мы задали маршрут для этой страницы в такой способ: сначала первым аргументом функции Route() мы указали адрес страницы, в нашем случае это символ /.
Вторым аргументом функции является название данного маршрута, это нужно для того чтобы мы могли потом с легкостью обратиться к нему, если будет такая потребность. Заметьте, что маршрутизацию для нашей первой страницы мы задали с помощью специального типа комментариев.
Ну и также с помощью подключенного компонента Route. Задав параметры маршрутизации страницы, мы создали саму функцию для страницы которая называется indexAction. Теперь, когда у нас есть маршрутизация для страницы и функция, которая будет отвечать за эту страницу, можно переходить к созданию содержимого страницы.
Сразу хочу сказать, что создавать страницы и вообще писать скрипты как раньше мы не будем. Здесь мы будем использовать инструменты фреймворка чтобы нам было намного легче создать своё первое приложение. Чтобы на странице показался ответ при заходе на нашу первую страницу мы использовали в конце функции аргумент return
, а после этого мы создали объект класса Response для того чтобы сделать ответ в виде текстовых данных, которые были записаны внутри объекта.
А теперь давайте протестируем что мы создали, запустите локальный сервер(если он у вас не запущен), и перейдите по адресу который был записан в функции Route. Вы можете указать в параметрах

PHP: Junior Kit
289
маршрутизации свой адрес который вы хотите использовать для вашей страницы.
После того как вы зайдете на страницу вы должны увидеть те текстовые данные которые вы указали в новом созданном объекта класса
Response
. Если у вас нету никаких ошибок, а вывелась надпись указанная в объекте - то значит, у вас все работает. Хорошо, а теперь, когда мы умеем работать с контроллером - давайте уже создадим полноценную статистическую страницу для теста. Вы помните что я вам говорил об папке с шаблонами - templates. Создайте в этой папке папку - post, в которой мы будем хранить шаблоны для нашего контроллера.
Наша первая страница будет просто статистической, и не будет из себя представлять что то особенное. Это будет простая веб-страница, написанная на HTML. Вот код нашей страницы:



1   ...   6   7   8   9   10   11   12   13   14


написать администратору сайта