Php 如何获取当前会话数组的细枝计数?

Php 如何获取当前会话数组的细枝计数?,php,symfony,session,twig,symfony4,Php,Symfony,Session,Twig,Symfony4,在我实例化小枝的引导文件中,我有: $twig->addGlobal('cart', $session->get('cart')); 在我的小枝顶部导航栏中,我有一个徽章,显示有多少物品添加到购物车中,如下所示: {{ cart|length }} 我的主文件是在我上面提到的引导文件之后调用的,我有: if (!empty($_getvars['id'])) { $data = $session->get('cart'); if(!isset($data[$

在我实例化小枝的引导文件中,我有:

$twig->addGlobal('cart', $session->get('cart'));
在我的小枝顶部导航栏中,我有一个徽章,显示有多少物品添加到购物车中,如下所示:

{{ cart|length }}
我的主文件是在我上面提到的引导文件之后调用的,我有:

if (!empty($_getvars['id'])) {
    $data = $session->get('cart');
    if(!isset($data[$_getvars['id']])) {
        $data[$_getvars['id']] = 0;
    }
    $data[$_getvars['id']] += 1;
    $session->set('cart', $data);
} 
print_r($session->get('cart'));

添加到会话工作正常,上面的“打印调试”显示它是准确的,但是在顶部的导航栏标记中,我总是获取以前的项目数量,而不是当前数量,除非我刷新页面以显示当前项目。如何修复它?

不要设置全局细枝变量,而是直接从模板中的会话读取,如下所示:

{% set cart = app.session.get('cart') %}
{{ cart|length }}
或者简单地说:

{{ app.session.get('cart')|length }}
这将为您提供更新的值(在控制器操作处理数据之后)

但是,看看你的相关问题,我认为你想要
array_sum()
而不是
length
,在twig中你可以使用
reduce
过滤器:

{{ app.session.get('cart')|reduce((carry, v) => carry + v) }}
这将汇总购物车数组中的所有数量值(项目总数与长度为
的唯一项目数量之和)

编辑:
如DarkBee所述,对于独立应用程序,您可以将会话对象添加为全局,而不是会话购物车值

$twig->addGlobal('session', $session);
然后在模板中:

{{ session.get('cart')|length }}
{# Or #}
{{ session.get('cart')|reduce((carry, v) => carry + v)}}

与其设置全局细枝变量,不如直接从模板中的会话读取,如下所示:

{% set cart = app.session.get('cart') %}
{{ cart|length }}
或者简单地说:

{{ app.session.get('cart')|length }}
这将为您提供更新的值(在控制器操作处理数据之后)

但是,看看你的相关问题,我认为你想要
array_sum()
而不是
length
,在twig中你可以使用
reduce
过滤器:

{{ app.session.get('cart')|reduce((carry, v) => carry + v) }}
这将汇总购物车数组中的所有数量值(项目总数与长度为
的唯一项目数量之和)

编辑:
如DarkBee所述,对于独立应用程序,您可以将会话对象添加为全局,而不是会话购物车值

$twig->addGlobal('session', $session);
然后在模板中:

{{ session.get('cart')|length }}
{# Or #}
{{ session.get('cart')|reduce((carry, v) => carry + v)}}

这不是一个框架。这是独立的。那么,如何在独立使用中获取/导入
app
?@user4271704为什么用symfony标记您的问题?这是symfony会话组件,但是独立的。您可以将
会话
对象添加为全局对象,而不是整数
购物车
,然后这不是框架。这是独立的。那么,如何在独立使用中获取/导入
app
?@user4271704为什么用symfony标记您的问题?这是symfony会话组件,但是是独立的。您可以将
会话
对象添加为全局对象,而不是整数
购物车