Тонкое приложение на XAMPP выдает исключение "Не найдено" - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь запустить проект Slim Framework на XAMPP и использую конфигурацию Apache с веб-сайта Slim Framework .

Когда я открываю этот URL http://localhost: 8081 / SlimAPIProject / public / hello / ayad Я получаю эту ошибку:

Fatal error: Uncaught Slim\Exception\HttpNotFoundException: Not found. in C:\xampp\htdocs\SlimAPIProject\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php:93 Stack trace:
#0 C:\xampp\htdocs\SlimAPIProject\vendor\slim\slim\Slim\Routing\RouteRunner.php(72): Slim\Middleware\RoutingMiddleware->performRouting(Object(Slim\Http\ServerRequest))
#1 C:\xampp\htdocs\SlimAPIProject\vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): Slim\Routing\RouteRunner->handle(Object(Slim\Http\ServerRequest))
#2 C:\xampp\htdocs\SlimAPIProject\vendor\slim\slim\Slim\App.php(211): Slim\MiddlewareDispatcher->handle(Object(Slim\Http\ServerRequest))
#3 C:\xampp\htdocs\SlimAPIProject\vendor\slim\slim\Slim\App.php(195): Slim\App->handle(Object(Slim\Http\ServerRequest))
#4 C:\xampp\htdocs\SlimAPIProject\public\index.php(16): Slim\App->run()
#5 {main} thrown in C:\xampp\htdocs\SlimAPIProject\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php on line 93

Это мой индекс. php

<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->get('/hello/{name}', function (Request $request, Response $response, array $args) {
    $name = $args['name'];
    $response->getBody()->write("Hello, $name");
    return $response;
});

$app->run();

1 Ответ

0 голосов
/ 01 мая 2020

Это может произойти, если вы работаете с Slim в подкаталоге вашей сети root. Slim необходимо знать, какая часть URL-адреса должна рассматриваться как базовый URL-адрес вашего приложения, чтобы все, что будет после этого, обрабатывалось как маршрут.

Я видел много решений, и ни одно из них не сработало для меня.

Кроме того, вы хотите, чтобы ваше приложение было переносимым, чтобы при его развертывании вам не пришлось возиться с некоторыми настройками, которые различаются на разных серверах. Поэтому я пришел к следующему решению, которое не требует каких-либо изменений вне точки входа основного приложения Slim.

<?php

...

// Instantiate App
$app = AppFactory::create();

// Set the base path of the Slim App
$basePath = str_replace('/' . basename(__FILE__), '', $_SERVER['SCRIPT_NAME']);
$app = $app->setBasePath($basePath);


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

...