У меня есть приложение со следующей структурой:
App/
|— app/
|— config
|— controllers
|— middlewares
|— routes
|— routes.php
|— views
|— app.php
|— autoload.php
|— public/
|—.htaccess
|— index.php
|— vendor/
Хорошо, в .htaccess в папке /public есть следующее (из документов Slim):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
И index.php в папке /public содержит следующее:
define('BASE_ROOT',dirname(__DIR__) . '/');
require_once BASE_ROOT.'app/app.php';
$app->run();
Итак, переходим к файлу app/app.php:
<?php
require BASE_ROOT.'app/autoload.php';
$app = new \Slim\App(["settings" => App\Config\Config::$config]);
$container = $app->getContainer();
$container['view'] = function($container) {
/*Set some configurations and environment vars*/
};
require BASE_ROOT.'app/routes/routes.php';
И, наконец, в файле route.php внутри app/routes/:
<?php
/*Routes*/
$app->get('/hello/{name}', function (Request $request, Response $response, array $args) {
$name = $args['name'];
$response->getBody()->write("Hello, $name");
});
Я поставил маршрут «hello world», чтобы упростить ситуацию, но проблема в том, что с любым маршрутом, зарегистрированным в route.php, я получаю код 404...
Я использую сервер apache, и конфигурация на виртуальном хосте следующая:
<VirtualHost *:80>
DocumentRoot "C:\Users\FranciscoSalazar\Desktop\PHP-SLIM\App/public"
ServerName medo
<Directory C:\Users\FranciscoSalazar\Desktop\PHP-SLIM\App/public>
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
I use:
- PHP 7.3.2
- Slim 3.0
- Apache 2.4
Если кто-то знает ответ или может направить меня, я буду очень признателен.
Да, я уверен. У меня есть два autoload.php, один в папке поставщика, а другой в папке приложения, и последний вызывает предыдущий, так что все должно быть в порядке.
Я считаю, что в route.php вы должны добавить use для типа «Запрос и ответ», иначе PHP будет искать класс «Запрос и ответ» в текущем пространстве имен.
также убедитесь, что mod_rewrite в Apache включен






Вы уверены, что правильно используете композитор? Поскольку сгенерированная автозагрузка обычно находится внутри каталога поставщика.