小编Joh*_*hnT的帖子

我的服务方法签名应该如何?

我正在使用服务层,直到现在我使用了ServiceObject(实现了ArrayAccess,Iterator,Countable),但我想知道这是不是一个好主意.

你会怎么做:

ArticleService::createArticle($articleData, $userId);
Run Code Online (Sandbox Code Playgroud)

要么

ArticleService::createArticle(ServiceObject $data);
Run Code Online (Sandbox Code Playgroud)

在哪里$data:

array(
  'title' => 'Lorem ipsum',
  'body'  => 'Dolor sid amet',
  'userId' => 55,
);
Run Code Online (Sandbox Code Playgroud)

ServiceObject具有为每个方法提供通用签名的好处,但有时它看起来效率不高,并且它没有被广泛使用,它失去了它的兴趣.

任何反馈?

php zend-framework method-signature service-layer

11
推荐指数
2
解决办法
363
查看次数

如果用户投票或不投票,您如何存储和显示?

我在投票网站上工作,我想知道如何处理投票.

例如,当您投票支持问题(或答案)时,您的投票会被存储,每次我返回页面时,我都可以看到我已经投票支持这个问题,因为上/下按钮是彩色的.

你是怎样做的?我的意思是我有几个想法,但我想知道它是否会成为数据库的重负荷.

这是我的想法:

  • 写一个帮助者,如果已投票,将检查每个问题

    这意味着查询的数量取决于页面上显示的项目数量(通常约为20)

  • 在我的项目上循环获取id,并为每个页面写一个查询,如果投票已经输入或NULL,则返回该查询

    看起来不错,因为只有一个查询与页面上的项目无关,但可能会破坏一些MVC /域模型设计,不知道.

  • 当用户登录(或为其创建匿名用户的访客)检索所有投票时,将其存储在会话中,如果投入新投票,则只需将其添加到会话中.

    看起来不错,因为除了第一个之外根本不需要任何查询,但是,根据投票的数量(可能是每个用户一堆),可以增加每个用户的会话大小并可能进行身份验证慢.

你好吗?还有其他想法吗?

session zend-framework vote doctrine-orm

8
推荐指数
1
解决办法
211
查看次数

如何在phpdoc中使用@package和@subpackage?

我想知道如何将@pa​​ckage和@subpackage用于类doc.

假设我有以下课程

class My_Controller_Action_Helper_MyHelperAction extends Foo_Bar {}
Run Code Online (Sandbox Code Playgroud)

应该是:

@category    My
@package     Controller
@subpackage  Action_Helper
Run Code Online (Sandbox Code Playgroud)

要么

@category    My
@package     Controller
@subpackage  Action_Helper_MyHelperAction
Run Code Online (Sandbox Code Playgroud)

要么

@category    My
@package     Controller_Action
@subpackage  MyHelperAction
Run Code Online (Sandbox Code Playgroud)

要么

@category   My
@package    My_Controller_Action
@subpackage MyHelperAction
Run Code Online (Sandbox Code Playgroud)

如果使用命名空间而不是'_'怎么办?

php phpdoc

7
推荐指数
1
解决办法
5511
查看次数

如何覆盖Magento控制器?

我需要使用服务器端代码检查结账/购物车页面上的优惠券代码的有效性.

Magento已经配备了类似的支票.但是,我需要添加一个以查看用户是否已连接:在Magento中扩展/覆盖该操作的最佳方法是什么?

我知道我可以将控制器PHP文件复制到/app/code/local/文件夹树,但我想知道是否有更好的方法来实现它.

php overriding controllers magento

6
推荐指数
1
解决办法
1万
查看次数

你如何在Doctrine 2中使用实体关系?

如果要插入实体,请执行以下操作:

$user = new User();
$user->setEmail('john@doe.com');

$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

但是,如果我想创建一个可以拥有一个用户的文章呢?

目前,我需要这样做:

$user = $em->getRepository('User')->find($id);
$article->setUser($user);
Run Code Online (Sandbox Code Playgroud)

这是因为关系,Doctrine 2要求用户实体.

但是,我不能"模拟"一个User对象,因为我不希望手动设置id,因此我不能这样做:

$user = new User();
$user->setId(45);
Run Code Online (Sandbox Code Playgroud)

我错了这个行为,你怎么办?

加载User实体只是为了设置关系,即使使用缓存也是一种性能问题,而缓存并不总是一种选择,特别是对于更新.

php entity-relationship lazy-loading insert-update doctrine-orm

5
推荐指数
1
解决办法
1601
查看次数

如何从Magento中的子类别中获取所有产品?

我正在寻找一种方法来检索包括其子类别在内的所有类别的产品并返回产品系列.

我知道我可以迭代类别来获取产品的ID并在视图中加载它们,但我希望得到一个产品集合,因为它目前在大多数类别/视图中完成.

有任何想法吗?

magento

4
推荐指数
1
解决办法
1万
查看次数

如何在Magento电子邮件模板中循环变量?

假设我将以下变量传递给我的电子邮件模板:

$vars = array(
    'products'  => $products,
);
Run Code Online (Sandbox Code Playgroud)

$products集合在哪里,我如何在电子邮件模板中迭代这个集合?

email iteration templates loops magento

3
推荐指数
1
解决办法
4563
查看次数

Magento中"catalog/category"和"catalog/layer"有什么区别?

我想了解这两种模型之间有什么区别,包括退货产品,是过滤器等等......

谢谢

php magento layered-navigation

3
推荐指数
1
解决办法
3171
查看次数

Oneliner将字符串前置或附加到另一个字符串

不是一个至关重要的问题,只是想知道是否有任何在线人员这样做.

function addString($text, $add, $type = 'prepend') {
   // oneliner here
   return $text;
}

$text = 'World';
addString($text, 'Hello ', 'prepend'); // returns 'Hello World'
addString($text, ' Hello', 'append'); // returns 'World Hello'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?:)

php string

2
推荐指数
1
解决办法
4415
查看次数

我安装了APC,现在?

我正在运行一个Zend Framework支持的网站,它运行良好,等等.

我有以下选项apc.cache-by-default设置,on当我检查apc.php我可以看到丢失的文件,我是APC的新手,我想知道这个选项我可以有什么样的惊喜.

我假设它只是文件的操作码缓存,然后没有缓存数据,我不会在我的网站中看到任何差异(这需要一些实时数据).

我对吗?

我的下一步是使用APC缓存一些数据库结果,但首先我想确定默认的APC配置已经为我做了什么.

谢谢

php configuration caching apc

2
推荐指数
1
解决办法
505
查看次数

如何提高我的投票系统的性能?

我有一个投票系统的网站(喜欢/不喜欢).

该应用程序是由另一个开发人员开发的,现在网站越来越大,性能得到认真考虑.

我有下表:

CREATE TABLE `vote` (
  `id` int(11) NOT NULL auto_increment,
  `article_id` int(11) NOT NULL,
  `token` varchar(64) collate utf8_unicode_ci NOT NULL,
  `type` int(1) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `article_id` (`article_id`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

令牌列用于标识每个用户/投票/日期,它是一个唯一令牌,它是用户指纹的一部分,允许他们投票一次并更改其投票类型.

最慢的查询之一是以下内容:

SELECT count(*) AS `nb` FROM `vote` WHERE (token = '00123456789012345678901234567890');
Run Code Online (Sandbox Code Playgroud)

当服务器没有关闭时,有时需要几乎10秒的时间才能返回.

我不能在这里使用缓存,因为我需要实时检查是否允许投票并增加计数.

我无法改变太多的应用程序逻辑,因为它依赖于应用程序中任何地方使用的太多依赖项(它设计得很糟糕).

所以我正在寻找改进甚至一些性能的选项.

编辑:我在令牌列上有一个索引

有大约2,000,000行,所有令牌几乎都是唯一的


编辑:

我提出了所有建议的基准:

Top average queries
1. SELECT COUNT(*) AS nb FROM `vote` WHERE (`token` = '%s') completed in 2.19790604115 sec
2. SELECT COUNT(`id`) AS nb FROM …
Run Code Online (Sandbox Code Playgroud)

mysql sql performance voting-system

1
推荐指数
1
解决办法
251
查看次数