我如何以及在何处对Doctrine 2 ORM执行业务逻辑导致Symfony 3?

时间:2016-07-29 07:03:22

标签: php doctrine-orm twig symfony

我正在尝试学习来自Kohana 3.x背景的Symfony 3 / Doctrine 2,不仅希望转向这个更新的框架,而且希望摆脱旧的坏习惯并以正确的方式做事。

我之前使用过ORM,但过去发现如果你试图使用它而不仅仅是基本的查询,那么ORM可能会妨碍我的做法,所以我过去的做法是避免使用ORM并继续使用ORM查询数据的更基本方法。

因此,如果您正在阅读本文,我的问题是关于业务逻辑。我被告知Doctrine实体应该是基本的表格布局,关系,索引,......几乎只是表格模式布局。那么业务逻辑在哪里呢?

我要求的是,如果有人能告诉我解决这个非常简单的问题的正确方法,并告诉我"标准"它应该被完成的方式。为此,我将描述我需要连接在一起的4个表,并为您提供1个业务逻辑,使我无法在项目中使用它。所以这是我的表格,我将消除尽可能多的字段,以便了解我的观点:

  

表:产品
  id - 整数(11)auto_inc
名称 - 字符串(255)
crawled_site - string(255)

     

表: product_categories
id - 整数(11)auto_inc
名称 - 字符串(255)

     

表: product_attributes
id - 整数(11)auto_inc
  product_id - int(11)(与product :: id的关系)
type - int(11)   (类型" 1"是产品类别)
value - int(11)(与...相关)   productCategories :: ID)

     

表: product_images
id - 整数(11)auto_inc
product_id - int(11)(与product :: id相关)< br /> name - string(255)

现在,这是您需要的下一件作品。 TWIG模板:

{% for product in products %}
    <div>
        <img src="{{product.imgname}}">
        <h1 class="name">{{product.name}} - {{product.crawledSite}}</h1>
        <em class="text-red1 half-bottom">
            <a href="#">{{product.catname}}</a>
        </em>
    </div>
{% endfor %}

在上面的模板中,&#39; catname&#39;并且&#39; imgname&#39;分别是productImages :: name data和productCategories :: name的占位符。

最后这是一个大问题。业务逻辑以及放置它的位置。产品图像表不存储webroot中图像的路径。让我们假装图像可能会被移动到Amazon S3,或者可能会将它们放在不同的外部设备,图像场等上,因此我们避免将路径放在数据库中。如何以及在何处将业务逻辑更改为图像名称或将路径与我的数据库结果一起传递给我的twig模板中的img src标记显示正确的完整路径。在这个特定的例子中,逻辑是如果产品的crawled_site是&#34; google.com&#34;例如,路径是/ home / web / images / a,但如果它是&#34; yahoo.com&#34;然后路径是/ home / web / images / b。因此,如果我们的产品有一个crawled_site,其值为&#34; google.com&#34;和产品&#34;名称&#34; field的值为&#34; 1234.jpg&#34;,然后我们需要给twig的路径是/home/web/images/a/1234.jpg。

那我该怎么做?你能告诉我你的控制器,实体和存储库以及你用来使它工作的任何东西吗?请记住,我正在寻找&#34;正确的&#34;这样做的方式,而不是黑客或解决方法。谢谢!

0 个答案:

没有答案