Фреймворк Слим не видит контроллер

92
31 марта 2022, 12:40

Начал работать с Фреймворком Slim для написания сайта на пхп. Однако, столкнулся с проблемой при пройстейшем рутинге. На данный момент имею структуру проекта:

Папка
-App
--Controllers(PagesController.php, Validator.php, ...)
--Models(User.php, UserManagerPDO.php, ...)
--Views(-Pages(signUp.twig)-Scripts)
-vendor
-composer.json
-composer.lock
-index.php

Для наглядности - процесс регистрации новго пользователя. Кусок из индекса:

$app->get('/auth/signup', 'App\Controllers\PagesController:getSignUp')->setName('auth.signup');
$app->post('/auth/signup', 'App\Controllers\PagesController:postSignUp');

кусок из контроллера:

public function getSignUp($request, $response)
    {
        if (!Validator::isConnected())
        {
        return $this->render($response, 'pages/signUp.twig');
        }
        else
        {
            return $this->redirect($response, 'homepage', 200);
        }

При попытке перейти на .../auth/signup слим ломается и выдает RuntimeException (Callable App\Controllers\PagesController does not exist). Сразу пришла мысль о неправильном пространстве имен (тк, если впихнуть какие либо действия непосредственно в индекс-файл то все работает). Это ответственный кусочек из контроллера:

<?php
namespace App\Controllers;
use App\Models\User;
use App\Models\UserManagerPDO;
use \PDO;
use App\Controllers\Validator;

Это отвественный кусочек из индекса:

<?php
use \App\Middlewares\FlashMiddleware;
use \App\Middlewares\OldMiddleware;
require '../vendor/autoload.php';
session_start();
$app = new \Slim\App((['settings' => ['displayErrorDetails' => true]]));
require ('../app/container.php');

Container.php лежит в App. Точно лежит. Немного погуглил и наткнулся на проблемы автозагрузки (не знаю как правильно сие обозвать) через композер. В моем .json файле не было поля автозагрузки, однако, добавив его, ничего не поменялось (composer dump-autoload да-да) и сейчас он выглядит следующим образом:

{
    "autoload": {
        "psr-4":{
            "App\\":"app/"
        }
    },
    "require": {
        "slim/slim": "3.5",
        "slim/twig-view": "2.1",
        "slim/csrf": "0.7.0"
    }
}

Пробовал и удалять папку вендор и пересобирать все с нуля - результат не меняется. На опечатки проверил, пути тоже везде верные. Где искать проблему, или, хотя бы, в какую сторону смотреть?
PS параметр отрисовки в контейнере:

$container['view'] = function($container)
{
    $dir = dirname(__DIR__);
    $view = new \Slim\Views\Twig($dir . '/app/views', ['cache' => false, 'debug' => $container->debug]);
    if ($container->debug)
    {
        $view->addExtension(new Twig_Extension_Debug());
    }
    $basePath = rtrim(str_ireplace('index.php', '', $container['request']->getUri()->getBasePath()), '/');
    $view->addExtension(new Slim\Views\TwigExtension($container['router'], $basePath));
    return $view;
}
Answer 1

Попробуйте добавить в контейнер ваш контроллер

$container[App\Controllers\PagesController::class] = function() {
    return new App\Controllers\PagesController();
};
READ ALSO
Удалить часть строки preg_replace

Удалить часть строки preg_replace

Есть строка https://sitecom/ru/moskov/medceter&page=2 Еще бывает https://site

73
Как переключить уведомления о смене пароля на другую почту?

Как переключить уведомления о смене пароля на другую почту?

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

199
Создавать диапазон из массива дат

Создавать диапазон из массива дат

Имеется массив дат с подмассивами из времёнНапример:

96
Как без ошибок получить страницу через CURL и отследить редирект?

Как без ошибок получить страницу через CURL и отследить редирект?

Имеется такой код получения страницыПри попытке получить первый url, срабатывает редирект и переменные $error и $response_string пустые

78