Получить имя группы в Slim Framework - PullRequest
0 голосов
/ 19 марта 2020

В моем приложении есть следующая группа маршрутов:

$app->group('/admin', function () use ($app){
    $app->get("", function(){
        $page = new PageAdmin();
        $page->setTpl("main/main");
    });
});
$app->group('/user', function () use ($app){
    $app->get("", function(){
        $page = new PageUser();
        $page->setTpl("main/main");
    });
});

Я хочу определить значение переменной на основе группы этих маршрутов.

Например: if группа «admin», моя переменная будет равна 1. Если группа «user», моя переменная будет равна 2.

Как мне это сделать? Я использую Slim Framework версии 3.

Я пытался использовать промежуточное ПО, используя $ route-> getGroups (), но моя страница выдает ошибку, и возвращаемый результат гораздо сложнее, чем мне нужно.


РЕДАКТИРОВАТЬ

Я попытался присвоить значение переменной после определения группы, но этот подход не сработал, потому что это значение всегда будет значением последняя группа (из-за потока чтения кода). Например:

$app->group('/admin', function () use ($app){
    $dir = "root";

    $app->get("", function(){
        $page = new PageAdmin();
        $page->setTpl("main/main");
    });
});
$app->group('/user', function () use ($app){
    $dir = "all";

    $app->get("", function(){
        $page = new PageUser();
        $page->setTpl("main/main");
    });
});

В приведенном выше случае, даже если я нахожусь на маршруте в группе «admin», переменная $ dir будет иметь значение «all». Если я закомментирую строку $ dir = "all"; мое приложение работает нормально, потому что переменная не была заменена.

Я попытался создать промежуточное ПО, используя саму документацию Slim Framework, следующим образом:

use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use \Rain\Tpl;

$slimSettings = array('determineRouteBeforeAppMiddleware' => true);

$slimConfig = array('settings' => $slimSettings);
$app = new \Slim\App($slimConfig);

$myMiddleware = function ($request, $response, $next) {

    $route = $request->getAttribute('route');
    $routeName = $route->getName();
    $groups = $route->getGroups();
    $methods = $route->getMethods();
    $arguments = $route->getArguments();

    print "Route Info: " . print_r($route, true);
    print "Route Name: " . print_r($routeName, true);
    print "Route Groups: " . print_r($groups, true);
    print "Route Methods: " . print_r($methods, true);
    print "Route Arguments: " . print_r($arguments, true);
};


$app->add($myMiddleware);

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

Кроме того, после комментирования строк, печатающих эту информацию, моя страница просто перестает работать. Таким образом, даже если бы я хотел их использовать, я не могу, потому что с этого момента появляется следующее сообщение:

Slim Application Error

Произошла ошибка веб-сайта. Приносим извинения за временные неудобства.

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


РЕДАКТИРОВАТЬ 2

Я буду использовать эту переменную в конструкторе класса, чтобы определить, какие шаблоны будут использоваться. Эти шаблоны будут определены в соответствии с группой маршрутов.

Сегодня приложение работает с константами, которые определены в файле конфигурации проекта.

namespace Admin;

use ACM\PageACM;

class PageAdmin extends PageACM{
    public function __construct($opts = array(), $project = ACMDef_PROJECT, $workspace = "admin", $theme = ACMDef_THEME_ADMIN){
        parent::__construct($opts, $project, $workspace, $theme);
    }
}

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

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

...