### 1. Используется БД для хранения данных. "illuminate/database": "^9.32" Создание объекта Capsule для установки соединения с БД: ```php $capsule = new Capsule; $capsule->addConnection([ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'database', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ]); ``` ### 2. Используется кеш в памяти для временного хранения сложных запросов к БД. "watson/rememberable": "^6.0" Сохранение статьи первого пользователя на 6 часов (360 минут): ```php User::first()->remember(360)->posts()->get(); ``` ### 3. Формируются XLS-отчеты на основе данных. "phpoffice/phpspreadsheet": "^1.25" Чтение и запись электронных таблиц в разных форматах. ### 4. Формируются PDF-документы на основе данных. "tecnickcom/tcpdf": "^6.5" Генерация PDF-документов. ### 5. Отправляются SMS-сообщения для верификации пользователей. "symfony/mailer": "^6.1" Отправляет SMS через API Twilio: ```php // Your Account SID and Auth Token from twilio.com/console $sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; $token = 'your_auth_token'; $client = new Client($sid, $token); // Use the client to do fun stuff like send text messages! $client->messages->create( // the number you'd like to send the message to '+15558675309', [ // A Twilio phone number you purchased at twilio.com/console 'from' => '+15017250604', // the body of the text message you'd like to send 'body' => 'Hey Jenny! Good luck on the bar exam!' ] ); ``` ### 6. Отправляются E-mail-уведомления и рассылки для пользователей. ### 7. Используется облачное хранилище AWS S3 или Windows Azure Blob для статичных файлов. "aws/aws-sdk-php": "^3.237" Подключает к проекту сервисы Amazon: ```php // Настройка клиента для S3, указание региона и последней версии $s3 = new Aws\S3\S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Отправка запроса PutObject $s3Client->putObject([ 'Bucket' => 'bucket', 'Key' => 'key', 'Body' => 'body' ]); // Загрузка объекта $result = $s3Client->getObject([ 'Bucket' => 'bucket', 'Key' => 'key' ]); ``` ### 8. Используется интеграция со службой доставки для расчета стоимости (например, PickPoint или Почта России) "sch-group/pickpoint": "^4.2" Обращается к PickPoint: ```php $config = [ 'host' => '', 'login' => '', 'password' => '', 'ikn' => '', ]; $pickPointConf = new PickPointConf($config['host'], $config['login'], $config['password'], $config['ikn']); $defaultPackageSize = new PackageSize(20, 20,20); // может быть null $senderDestination = new SenderDestination('Москва', 'Московская обл.'); // Адрес отправителя $client = new PickPointConnector($pickPointConf, $senderDestination, $defaultPackageSize); ``` "lapaygroup/russianpost": "*" Обращается к Почте России: ```php $objectId = 2020; // Письмо с объявленной ценностью // Минимальный набор параметров для расчета стоимости отправления $params = [ 'weight' => 20, // Вес в граммах 'sumoc' => 10000, // Сумма объявленной ценности в копейках 'from' => 109012 // Почтовый индекс места отправления ]; // Список ID дополнительных услуг // 2 - Заказное уведомление о вручении // 21 - СМС-уведомление о вручении $services = [2,21]; $TariffCalculation = new \LapayGroup\RussianPost\TariffCalculation(); $calcInfo = $TariffCalculation->calculate($objectId, $params, $services); ``` ### 9. Используется интеграция с социальными сетями для авторизации пользователей. "hybridauth/hybridauth": "^3.8" Пакет для интеграции Facebook, Twitter, Google и т.д. Аутентификация через GitHub: ```php $config = [ 'callback' => 'https://example.com/path/to/script.php', 'keys' => [ 'id' => 'your-app-id', 'secret' => 'your-app-secret' ] ]; $github = new Hybridauth\Provider\GitHub($config); $github->authenticate(); $userProfile = $github->getUserProfile(); ``` ### 10. Данные о товарах регулярно отправляются в Яндекс.Маркет. "yandex-market/yandex-market-php-partner": "^2.4" Подключение API Яндекс.Маркета: ```php // Указываем авторизационные данные $clientId = '9876543210fedcbaabcdef0123456789'; $token = '01234567-89ab-cdef-fedc-ba9876543210'; // Создаем экземпляр клиента с базовыми методами $baseClient = new \Yandex\Market\Partner\Clients\BaseClient($clientId, $token); // Магазины возвращаются постранично $pageNumber = 0; do { $pageNumber++; // Получаем страницу магазинов с номером pageNumber $campaignsObject = $baseClient->getCampaigns(['page' => $pageNumber,]); // Получаем итератор по магазинам на странице $campaignsPage = $campaignsObject->getCampaigns(); // Получаем количество магазинов на странице $campaignsCount = $campaignsPage->count(); // Получаем первый магазин $campaign = $campaignsPage->current(); // Печатаем идентификатор и URL магазина, затем переходим к следующему for ($i = 0; $i < $campaignsCount; $i++) { echo 'ID: ' . $campaign->getId(); echo 'Domain: ' . $campaign->getDomain(); $campaign = $campaignsPage->next(); } // Получаем информацию о страницах. Возвращаемое количество страниц может увеличиваться // по мере увеличения номера страницы. Последняя страница будет достигнута, // когда вернется количество страниц, равное номеру текущей страницы $campaignsTotalPages = $campaignsObject->getPager()->getPagesCount(); } while ($pageNumber != $campaignsTotalPages); ``` ### 11. Принимается онлайн-оплата от покупателей. "trustly/trustly-client-php": "^2021.1" Подключение онлайн-платежей: ```php /* Change 'test.trustly.com' to 'trustly.com' below to use the live environment */ $api = new Trustly_Api_Signed( $trustly_rsa_private_key, $trustly_username, $trustly_password, 'test.trustly.com' ); $deposit = $api->deposit( "$base_url/php/example.php/notification", /* NotificationURL */ 'john.doe@example.com', /* EndUserID */ $messageid, /* MessageID */ 'en_US', /* Locale */ $amount, /* Amount */ $currency, /* Currency */ 'SE', /* Country */ NULL, /* MobilePhone */ 'Sam', /* FirstName */ 'Trautman', /* LastName */ NULL, /* NationalIdentificationNumber */ NULL, /* ShopperStatement */ $ip, /* IP */ "$base_url/success.html", /* SuccessURL */ "$base_url/fail.html", /* FailURL */ NULL, /* TemplateURL */ NULL, /* URLTarget */ NULL, /* SuggestedMinAmount */ NULL, /* SuggestedMaxAmount */ 'trustly-client-php example/1.0' /* IntegrationModule */ FALSE, /* HoldNotifications */ 'john.doe@example.com', /* Email */ 'SE', /* ShippingAddressCountry */ '12345', /* ShippingAddressPostalCode */ 'ExampleCity', /* ShippingAddressCity */ '123 Main St' /* ShippingAddressLine1 */ 'C/O Careholder', /* ShippingAddressLine2 */ NULL /* ShippingAddress */ ); $iframe_url= $deposit->getData('url'); Example notification processing $request = $api->handleNotification($notification_body); # FIXME Handle the incoming notification data here $notifyresponse = $api->notificationResponse($request, TRUE); ``` ### 12. Применяются средства тестирования (например, PHPUnit). "phpunit/phpunit": "^9.5" Объект для модульного тестирования: ```php class StackTest extends TestCase { public function testPushAndPop() { $stack = []; $this->assertSame(0, count($stack)); array_push($stack, 'foo'); $this->assertSame('foo', $stack[count($stack)-1]); $this->assertSame(1, count($stack)); $this->assertSame('foo', array_pop($stack)); $this->assertSame(0, count($stack)); } } ```