gpt4 book ai didi

php - 如何使我的存储库区分后端/前端

转载 作者:搜寻专家 更新时间:2023-10-31 21:07:43 26 4
gpt4 key购买 nike

我正在建立一个带有管理区域的网上商店来管理产品。在管理区域中,所有产品都是可见的,但在网上商店中,只有数据库表中标记为 active = 1 的产品是可见的。

我正在使用 Silex 并将存储库注册为服务。我如何使用相同的存储库/方法在后端/前端获取产品(并将前端限制为仅事件产品)?

我想到了以下几点:

  • 使用 setter 方法设置属性 backend = true存储库。
  • 制作两个不同的仓库
  • 扩展存储库

也许我遗漏了什么,但这样做的正确和最漂亮的方法是什么?

最佳答案

您可以创建一个学说过滤器(当启用时)会自动将 active = true 添加到任何 SQL 查询中。当通过后端访问或用户具有特定角色(或不具有特定角色,具体取决于您的用例)时,您将禁用。

Acme\ProductBundle\Doctrine\Filter\ActiveProductsFilter

namespace Acme\ProductBundle\Doctrine\Filter;

use Doctrine\ORM\Mapping\ClassMetaData,
Doctrine\ORM\Query\Filter\SQLFilter;

class ActiveProductsFilter extends SQLFilter
{

public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
// Check if the entity implements the LocalAware interface
if (!$targetEntity->reflClass
->implementsInterface('Acme\ProductBundle\Model\ProductInterface')) {
return "";
}

return $targetTableAlias.'.active = '.$this->em->getConnection()
->quote(true, 'boolean');
}
}

app/config/config.yml

doctrine:
orm:
entity_managers:
default:
filters:
activeproducts:
class: Acme\ProductBundle\Doctrine\Filter\ActiveProductsFilter
enabled: true

然后您可以根据您的要求(当前路由、用户角色等)使用监听器或其他东西来启用或禁用

$em->getFilters()->disable('activeproducts');

关于php - 如何使我的存储库区分后端/前端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29625551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com