Невозможно настроить маршрутизацию для работы в приложении php с использованием маршрутизации Symfony. - PullRequest
0 голосов
/ 10 октября 2019

index.php

require "vendor/autoload.php";
require "routes.php";

rout.php

<?php
require "vendor/autoload.php";

use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;




try {

    $form_add_route = new Route(
        '/blog/add',
        array(
          'controller' => '\HAPBlog\Controller\EntityAddController',
          'method'=>'load'
        )
    );


    $routes = new RouteCollection();
    $routes->add('blog_add', $form_add_route);

    // Init RequestContext object
    $context = new RequestContext();
    $context->fromRequest(Request::createFromGlobals());

    $matcher = new UrlMatcher($routes, $context);
    $parameters = $matcher->match($context->getPathInfo());

    // How to generate a SEO URL
    $generator = new UrlGenerator($routes, $context);
    $url = $generator->generate('blog_add');
    echo $url;
}

catch (Exception $e) {
    echo '<pre>';
    print_r($e->getMessage());
}

src / Controller / EntityAddController.php

    <?php

namespace HAPBlog\Controller;

use Symfony\Component\HttpFoundation\Response;

class EntityAddController {

  public function load() {

      return new Response('ENTERS');

  }

}

Я имею в виду учебное пособие, данное ниже:

https://code.tutsplus.com/tutorials/set-up-routing-in-php-applications-using-the-symfony-routing-component--cms-31231

Но когда я пытаюсь зайти на сайт http://example.com/routes.php/blog/add Это дает пустую страницу. Отладка с помощью PHPStorm показывает, что он не входит в класс «EntityAddController». Что не так в приведенном выше коде?

1 Ответ

1 голос
/ 11 октября 2019

За этим процессом нет никакой магии, как только вы получите информацию о маршруте, вам нужно будет вызвать настроенный контроллер и отправить ответное содержимое.

Вот полный пример:

// controllers.php

class BlogController
{
    public static function add(Request $request)
    {
        return new Response('Add page!');
    }
}

// routes.php

$routes = new RouteCollection();
$routes->add('blog_add', new Route('/blog/add', [
    'controller' => 'BlogController::add',
]));

// index.php

$request = Request::createFromGlobals();
$context = new RequestContext();
$context->fromRequest($request);
$matcher = new UrlMatcher($routes, $context);

try {
    $attributes = $matcher->match($request->getPathInfo());

    $response = $attributes['controller']($request);
} catch (ResourceNotFoundException $exception) {
    $response = new Response('Not Found', 404);
} catch (Exception $exception) {
    $response = new Response('An error occurred', 500);
}

$response->send();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...