Когда веб-сервер Apache получает HTTP-запрос от браузера, он запускает файл APP_DIR/public/index.php, также называемый входной скрипт.
Входной скрипт - это единственный PHP-файл, доступный для внешнего мира. Сервер отравляет ему все HTTP-запросы (помните файл .htaccess?). Наличие такого скрипта делает сайт более безопасным (по сравнению с ситуацией, когда вы позволяете всем иметь доступ к файлам вашего приложения).
Хотя файл index.php является очень важным, он на удивление невелик (см. ниже):
<?php
use Zend\Mvc\Application;
use Zend\Stdlib\ArrayUtils;
/**
* Это облегчает нам работу с путями.
* Все пути теперь - относительно корня приложения.
*/
chdir(dirname(__DIR__));
// Отклонить запросы статического файла
if (php_sapi_name() === 'cli-server') {
$path = realpath(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
if (__FILE__ !== $path && is_file($path)) {
return false;
}
unset($path);
}
// Автозагрузка Composer
include __DIR__ . '/../vendor/autoload.php';
if (! class_exists(Application::class)) {
throw new RuntimeException(
"Unable to load application.\n"
. "- Type `composer install` if you are developing locally.\n"
. "- Type `vagrant ssh -c 'composer install'` if you are using Vagrant.\n"
. "- Type `docker-compose run zf composer install` if you are using Docker.\n"
);
}
// Извлечение конфигурации
$appConfig = require __DIR__ . '/../config/application.config.php';
if (file_exists(__DIR__ . '/../config/development.config.php')) {
$appConfig = ArrayUtils::merge($appConfig, require __DIR__ . '/../config/development.config.php');
}
// Запуск приложения!
Application::init($appConfig)->run();
В нем, главным образом, делаются три вещи.
Во-первых, в строке 10, действующий в данный момент каталог меняется на APP_DIR
.
Это упрощает определение относительных путей файлов вашего приложения.
Во-вторых, в строке 22 инициируется класс автозагрузки. Это позволяет легко загружать любой класс,
находящийся либо в библиотеке Zend Framework, либо в вашем приложении, без необходимости использования
оператора require_once
.
И в-третьих, в строке 40 создается экземпляр класса Zend\Mvc\Application
.
Приложение инициализируется с настройками из файла конфигурации application.config.php
и запускается.