Quando o servidor da web Apache recebe uma solicitação HTTP do navegador, ele executa o arquivo APP_DIR/public/index.php, também chamado de script de entrada.
O script de entrada é o único arquivo PHP acessível. O servidor web Apache Direciona todas as solicitações HTTP para este script (lembre-se do arquivo .htaccess). Tendo isto script de entrada única torna o site mais seguro (comparando com a situação quando você permite todos para acessar todos os arquivos PHP da sua aplicação).
Embora o arquivo index.php seja muito importante, é surpreendentemente pequeno (veja abaixo):
<?php
use Zend\Mvc\Application;
use Zend\Stdlib\ArrayUtils;
/**
* This makes our life easier when dealing with paths. Everything is relative
* to the application root now.
*/
chdir(dirname(__DIR__));
// Decline static file requests back to the PHP built-in webserver
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 autoloading
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"
);
}
// Retrieve configuration
$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');
}
// Run the application!
Application::init($appConfig)->run();
Principalmente, há três coisas feitas nele.
Primeiro, na linha 10, a pasta é alterada para APP_DIR
.
Isso simplifica a definição de caminhos de arquivos em sua aplicação.
Em seguida, na linha 22, o autoload da classe é inicializado. Isso permite carregar facilmente qualquer
classe ou localizada qualquer biblioteca do Zend Framework ou em sua aplicação sem a necessidade
da utilização require_once
.
E finalmente, na linha 40, uma instância da classe Zend\Mvc\Application
é criada.
O aplicativo é inicializado com as configurações do application.config.php
e a sua aplicação é executada.