A free and open-source book on ZF3 for beginners


3.6. Входной скрипт сайта

Когда веб-сервер 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 и запускается.


Top