Начал работать с Фреймворком 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;
}
Попробуйте добавить в контейнер ваш контроллер
$container[App\Controllers\PagesController::class] = function() {
return new App\Controllers\PagesController();
};
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть строка https://sitecom/ru/moskov/medceter&page=2 Еще бывает https://site
При смене пароля на почту админа приходит уведомление о смене пароляПодскажите, как сделать чтобы эти уведомления админу приходили на другую...
Имеется такой код получения страницыПри попытке получить первый url, срабатывает редирект и переменные $error и $response_string пустые