- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Sylius 购物车和订单 bundle ,并尝试将商品添加到购物车并显示购物车中商品的摘要。我遇到的问题是 Symfony/Sylius 忘记了它已经制作了一个购物车并向其中添加了元素。
如果我单击一个链接,转到 sylius 购物车的添加页面,由
{{ path('sylius_cart_item_add', {'productId': class.ClassID}) }}
没有错误发生。如果我查看数据库,我可以看到在 sylius_cart 表和 sylius_cart_item 表中创建了一个新条目,其中包含正确的信息;然而,购物车摘要页面什么都不显示,并认为购物车是空的。
如果我尝试添加另一个项目,它会创建另一个新购物车并立即忘记它创建了购物车。
我在 AppKernel.php 中加载了以下包
public function registerBundles()
{
$bundles = array(
//bundles for using the shopping cart
new FOS\RestBundle\FOSRestBundle(),
new JMS\SerializerBundle\JMSSerializerBundle($this),
new Sylius\Bundle\ResourceBundle\SyliusResourceBundle(),
new WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle(),
new Sylius\Bundle\MoneyBundle\SyliusMoneyBundle(),
new Sylius\Bundle\OrderBundle\SyliusOrderBundle(),
new Sylius\Bundle\CartBundle\SyliusCartBundle(),
new Sylius\Bundle\SequenceBundle\SyliusSequenceBundle(),
//bundles for styling with bootstrap 3
new Mopa\Bundle\BootstrapBundle\MopaBootstrapBundle(),
//mssql connection library
new Realestate\MssqlBundle\RealestateMssqlBundle(),
//default frameworks
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new CE\CEBundle\CEBundle(),
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}
return $bundles;
}
我的 ItemResolver 类看起来像
namespace CE\CEBundle\Cart;
use Sylius\Component\Cart\Model\CartItemInterface;
use Sylius\Component\Cart\Resolver\ItemResolverInterface;
use Sylius\Component\Cart\Resolver\ItemResolvingException;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManager;
class ItemResolver implements ItemResolverInterface
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function resolve(CartItemInterface $item, $data)
{
//grab the product ID
$productId = $data->get('productId');
if (!$productId || !$product = $this->getProductRepository()->find($productId)) {
throw new ItemResolvingException('Requested product was not found');
}
$item->setProductId($product->getId());
$item->setUnitPrice($product->getClassFee() * 100);
return $item;
}
private function getProductRepository()
{
return $this->entityManager->getRepository('CEBundle:Product');
}
}
我的 CartItem 类看起来像
namespace CE\CEBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Sylius\Component\Cart\Model\CartItem as BaseCartItem;
/**
* @ORM\Entity
* @ORM\Table(name="sylius_cart_item")
*/
class CartItem extends BaseCartItem
{
/**
* @ORM\Column(type="string", name="product_id", length=8)
*/
private $productId;
public function getProductId()
{
return $this->productId;
}
public function setProductId($Id)
{
$this->productId = $Id;
}
}
我的 config.yml 中有以下配置
imports:
- { resource: parameters.yml }
- { resource: security.yml }
framework:
#esi: ~
#translator: { fallback: "%locale%" }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
templating:
engines: ['twig']
#assets_version: SomeVersionScheme
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
name: SYLIUS_SESSION
cookie_lifetime: 72000
fragments: ~
http_method_override: true
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
# Assetic Configuration
assetic:
debug: "%kernel.debug%"
use_controller: false
bundles: [ ]
#java: /usr/bin/java
filters:
cssrewrite: ~
#closure:
# jar: "%kernel.root_dir%/Resources/java/compiler.jar"
#yui_css:
# jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
# Doctrine Configuration
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mssqlDB:
driver_class: Realestate\MssqlBundle\Driver\PDODblib\Driver
host: %db.other.host%
dbname: %db.other.db_name%
user: %db.other.user%
password: %db.other.password%
# if using pdo_sqlite as your database driver, add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# path: "%database_path%"
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
CEBundle: ~
mssqlDB:
connection: mssqlDB
mappings:
CEBundle: ~
auto_generate_proxy_classes: "%kernel.debug%"
#auto_mapping: true
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
#sylius configuration
sylius_cart:
resolver: ce.cart_item_resolver
classes: ~
provider: sylius.cart_provider.default
storage: sylius.storage.session
sylius_order:
driver: doctrine/orm
classes:
order_item:
model: CE\CEBundle\Entity\CartItem
sylius_sequence:
driver: doctrine/orm
#mopa configuration for forms and bootstrap
mopa_bootstrap:
form:
checkbox_label: 'widget'
值得注意的是,如果我查看 Chrome 开发人员工具中的“资源”选项卡,我可以看到当我将商品添加到购物车时 SYLIUS_SESSION 确实已设置。
我已尝试将存储更改为 cookie 而不是 session 并倾倒文档,但我不知道如何解决此问题。我猜它可能是个小东西,我只是不知道它是什么。
提前感谢您的帮助。
最佳答案
在您的 config.yml
文件中,您正在使用 sylius.cart_provider.default
,这意味着您需要先获取当前的 Sylius Cart Provider,然后再向其添加商品。
这意味着在您的 Controller 中,您需要像这样检索 cart_provider
服务:
// gets the current cart
$cart = $this->get('sylius.cart_provider')->getCart();
之后,您可以创建一个 $item
,就像您在调用 ItemResolver::resolve()
方法时所做的那样,并且该项目可以添加到大车。
您可能还需要将购物车的调度程序事件 ITEM_ADD_INITIALIZE
、CART_CHANGE
等添加到您的代码中,以使商品实际出现在购物车中。
查看 CartItemEvent
类。如果您需要这方面的帮助,请告诉我。
关于php - 添加项目后 Sylius 不记得购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28183158/
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!