В моем приложении есть следующая группа маршрутов:
$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», и это касается каталог, в котором находится мой шаблон. Он может принимать разные значения, поскольку пользователь может работать с разными темами или пользователи с разными разрешениями также могут использовать эти ресурсы.