Symfony 4.1 404 на маршрутах, маршруты отображаются в отладчике и кэш очищен - PullRequest
0 голосов
/ 03 сентября 2018

У меня проблема с последней версией Symfony 4.1

Я только начинаю работать с последней версией Symfony. В прошлый раз, когда я использовал Symfony, он все еще был в версии 2.8

В любом случае, моя проблема в том, что Symfony возвращает 404 на любом маршруте, отличном от первого маршрута моего DefaultController.

<?php
namespace App\Controller;

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;

class DefaultController
{
    public function index()
    {
        return new JsonResponse(['world'], Response::HTTP_OK);
    }

    public function show($slug)
    {
        return new JsonResponse(['slug' => $slug], Response::HTTP_OK);
    }
}

Это мой конфиг / rout.yaml:

index:
  path: /
  controller: App\Controller\DefaultController::index
  condition: "context.getMethod() in ['GET']"

blog_show:
  path:     /blog/{slug}
  controller: App\Controller\DefaultController::show
  condition: "context.getMethod() in ['GET']"

Посещая localhost, возвращает ответ ['world'], как и ожидалось, и если я изменю это слово, ответ также изменится.

Однако, когда я пытаюсь нажать на URL http://localhost/blog/iliketacos, я получаю ошибку 404.

Если я запускаю отладчик маршрута php bin/console debug:router, я получаю следующую таблицу:

 -------------------------- -------- -------- ------ -----------------------------------
  Name                       Method   Scheme   Host   Path
 -------------------------- -------- -------- ------ -----------------------------------
  _twig_error_test           ANY      ANY      ANY    /_error/{code}.{_format}
  _wdt                       ANY      ANY      ANY    /_wdt/{token}
  _profiler_home             ANY      ANY      ANY    /_profiler/
  _profiler_search           ANY      ANY      ANY    /_profiler/search
  _profiler_search_bar       ANY      ANY      ANY    /_profiler/search_bar
  _profiler_phpinfo          ANY      ANY      ANY    /_profiler/phpinfo
  _profiler_search_results   ANY      ANY      ANY    /_profiler/{token}/search/results
  _profiler_open_file        ANY      ANY      ANY    /_profiler/open
  _profiler                  ANY      ANY      ANY    /_profiler/{token}
  _profiler_router           ANY      ANY      ANY    /_profiler/{token}/router
  _profiler_exception        ANY      ANY      ANY    /_profiler/{token}/exception
  _profiler_exception_css    ANY      ANY      ANY    /_profiler/{token}/exception.css
  index                      ANY      ANY      ANY    /
  blog_show                  ANY      ANY      ANY    /blog/{slug}
 -------------------------- -------- -------- ------ -----------------------------------

Я также могу успешно сопоставить маршрут в консоли:

php bin/console router:match /blog/iliketacos



 [OK] Route "blog_show" matches


+--------------+---------------------------------------------------------+
| Property     | Value                                                   |
+--------------+---------------------------------------------------------+
| Route Name   | blog_show                                               |
| Path         | /blog/{slug}                                            |
| Path Regex   | #^/blog/(?P<slug>[^/]++)$#sD                            |
| Host         | ANY                                                     |
| Host Regex   |                                                         |
| Scheme       | ANY                                                     |
| Method       | ANY                                                     |
| Requirements | NO CUSTOM                                               |
| Class        | Symfony\Component\Routing\Route                         |
| Defaults     | _controller: App\Controller\DefaultController::show     |
| Options      | compiler_class: Symfony\Component\Routing\RouteCompiler |
+--------------+---------------------------------------------------------+

Кэш очищался несколько раз, я даже очищал его вручную (удаляя каталоги dev и prod)

Я запускаю свое приложение Symfony в контейнере Docker с пользователем root, если это имеет значение.

Почему мой браузер не может получить правильный ответ от Symfony, но все инструменты Symfony определяют, что все должно быть хорошо?

РЕДАКТИРОВАТЬ: Docker вещи (ни один из этих учетных данных не являются учетными данными Prod, так что не беспокойтесь)

version: '3'
services:
  daracatum_db:
    image: mysql:5.7
    volumes:
      - ./db:/var/lib/mysql
      - ./db_init:/docker-entrypoint-initdb.d
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: tYAQORgNyV
      MYSQL_DATABASE: daracatum_backend
      MYSQL_USER: daracatum
      MYSQL_PASSWORD: tdAY8zKfkz
    ports:
      - "3306:3306"
  daracatum_app:
    depends_on:
      - daracatum_db
    image: php:7.2-apache
    ports:
      - "80:80"
    restart: always
    environment:
      DB_HOST: daracatum_db:3306
      DB_USER: daracatum
      DB_PASSWORD: tdAY8zKfkz
      APP_ENV: dev
      APP_SECRET: 2e812144275b4979c2ef671ee72f7148
      DATABASE_URL: mysql://db_user:db_password@127.0.0.1:3306/db_name
      MAILER_URL: null://localhost
    volumes:
      - ./app:/var/www
      - ./app/public:/var/www/html
      - ./scripts:/scripts

Затем я запускаю SSH в экземпляр и запускаю этот скрипт:

#!/bin/bash
# ./scripts/composer.sh

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/bin/composer
chmod +x /usr/bin/composer
apt-get update
apt-get install -y git zip unzip
cd /var/www/
composer install 
composer require annotations
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...