Php 无法从Slim v4中的中间件分配细枝参数
我正在尝试将我的网站代码从SlimV2升级到v4。我不是一个铁杆程序员,所以我面临一些问题。在Slim v2中,我有一些中间件,在执行路由代码之前,我能够将参数分配给细枝视图。现在,我正试图用Slim v4实现同样的目标,但没有成功 这是一个测试代码:Php 无法从Slim v4中的中间件分配细枝参数,php,twig,slim,Php,Twig,Slim,我正在尝试将我的网站代码从SlimV2升级到v4。我不是一个铁杆程序员,所以我面临一些问题。在Slim v2中,我有一些中间件,在执行路由代码之前,我能够将参数分配给细枝视图。现在,我正试图用Slim v4实现同样的目标,但没有成功 这是一个测试代码: use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Se
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Routing\RouteContext;
require 'vendor/autoload.php';
require 'config.php';
lib\Cookie::init();
$container = new \DI\Container();
$container->set('view', function($container) {
return Twig::create(__DIR__ . '/views');
});
$container->set('flash', function ($container) {
return new \Slim\Flash\Messages();
});
$container->get('view')->getEnvironment()->addGlobal('flash', $container->get('flash'));
AppFactory::setContainer($container);
$app = AppFactory::create();
$app->addErrorMiddleware(true, false, false);
$fb = new Facebook\Facebook([
'app_id' => '...',
'app_secret' => '...',
'default_graph_version' => '...',
]);
$beforeMiddleware = function (Request $request, RequestHandler $handler) use ($fb) {
$response = $handler->handle($request);
if (!isset($_SESSION['fbuser'])) {
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email'];
$loginUrl = $helper->getLoginUrl('...', $permissions);
$this->get('view')->offsetSet('fbloginurl', $loginUrl);
}
else {
$this->get('view')->offsetSet('fbuser', $_SESSION['fbuser']);
}
$uri = $request->getUri();
$this->get('view')->offsetSet('currenturl', $uri);
return $response;
};
$app->add($beforeMiddleware);
$app->get('/test', function (Request $request, Response $response, $args) {
$oViewParams = new \lib\ViewParams("home", "", "", "", "");
$oProfession = new \models\Profession();
$oBlogPost = new models\BlogPost();
$oBlogTopic = new models\BlogTopic();
$professions = $oProfession->getProfessionsWithLimit(14);
$posts = $oBlogPost->getMainPagePosts();
echo $this->get('view')->offsetGet('fbloginurl');
$params = array('professions' => $professions,
'posts' => $posts,
'viewp' => $oViewParams->getMassParams());
return $this->get('view')->render($response, 'index.html', $params);
});
$app->run();
当我使用
echo$this->get('view')->offsetGet('fbloginul')代码>显示在中间件中。当我在路由中使用相同的代码时,将不会显示任何内容…当您有
$response = $handler->handle($request);
由于这是在设置任何要在twig中使用的值之前,所以尚未设置这些值。设置完这些值后,移动上面的一行,这些值应该对代码的其余部分可用。这不是($handler->handle$request)
调用下一级代码的位置,即在您设置任何内容之前。请尝试将该行移动到$beforemidleware
的末尾,查看它是否更改。谢谢!就是这样!@TamásVarga作为答案,请不要忘记将答案标记为已接受,以供将来的读者使用。