我正在尝试使用Zend Framework 1.7.4上传文件,但尚未成功.我已经阅读过Akrabat的教程,这很有帮助但是当我在我的项目中使用这些技术时,我无法让它工作.
给出以下DQL查询:
SELECT
p,
(p.views * 0.1) + (p.likes * 0.9) as ratingPhoto
FROM
AppBundle:Photo p
ORDER BY
ratingPhoto DESC
Run Code Online (Sandbox Code Playgroud)
我的结果集如下所示:
array (size=14)
0 =>
array (size=2)
0 => object(Photo)
'ratingPhoto' => string '1.42' (length=4)
1 =>
array (size=2)
0 => object(Photo)
'ratingPhoto' => string '1.31' (length=4)
...
Run Code Online (Sandbox Code Playgroud)
是否有任何DQL功能,以便我只检索Photo对象并从结果集中排除其他选定的字段?这是我期望的结果:
array (size=14)
0 => object(Photo)
1 => object(Photo)
...
Run Code Online (Sandbox Code Playgroud) 我为我的模块编写了一个自定义服务.此服务提供公共静态函数,这些函数应验证给定的标记.
现在我想实现另一个公共静态函数,它检查是否存在Doctrine-Entity.对于这种情况,我需要在我的服务中使用对象管理器或服务定位器.
class ApiService
{
const KEY_LENGTH = 10;
const USE_NUMBERS = true;
const USE_CHARS = true;
public static function isValid($apiKey) {
$isValid = false;
# more code tbd
$isValid = self::exists($apiKey);
return $isValid;
}
public static function exists($apiKey) {
# Insert Object-Manager here
$validator = new \DoctrineModule\Validator\ObjectExists(array(
'object_repository' => $objectManager->getRepository('Application\Entity\User'),
'fields' => array('email')
));
}
}
Run Code Online (Sandbox Code Playgroud)
将我的函数实现为public static并将它们称为静态方法是"最佳实践"吗?
将对象管理器注入我的doesEntityExist()函数的最佳实践是什么?
我是Zend Framework 2的新手,只知道一些基础知识.我发现很难找到很多例子.
Quesiton:在数据库中获取BLOB字段并通过控制器显示它.例如:www.mysite.com/images/2将从数据库中检索BLOB并将其作为图像显示给用户,因此html标签<img src="http://www.mysite.com/images/2"/>将显示图像.
我通常在ASP.NET MVC中做,但不知道如何在这里做.如果有人能够告诉我如何实现它,我会很高兴.
假设我从数据库中获取了图像.
我设法找到了如何返回JSON并相信一些简单的东西会起作用.但找不到解决方案.我还需要发送这样的文件.
public function displayAction()
{
$id = 10;
$albumImage = $this->getAlbumImageTable()->getAlbumImage($id);
if ($albumImages){
//Show the image $albumImage
//return JsonModel(array(...)) for json but for image ???
} else{
//Show some other image
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以提供帮助,我将不得不承担责任.
提前致谢.
我有一个实现postLoad生命周期事件方法的实体.此方法有条件地更新实体并尝试保存它.有点像:
/**
* @PostLoad
*/
public function checkExpiryDate()
{
$currentDate = new App_Date();
// Check the expiry date here
if($currentDate->getTimestamp() > $this->getDateExpired()->getTimestamp()) {
$this->Status = "expired";
$this->ServiceLayer->saveEntity($this);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
Call to a member function fetch() on a non-object in Doctrine/ORM/Internal/Hydration/ObjectHydrator.php on line 149
Run Code Online (Sandbox Code Playgroud)
看来我在postLoad期间无法保存实体.
我偶然发现了这张票,建议在新密钥下注册ObjectHydrator并在任何新查询期间指定保温器.
但是,我想知道是否有一种很好的方法可以在更抽象的层面上实现它; 每当在postLoad调度期间构建查询时,我想自动注册一个新的ObjectHydrator.
此外,任何人都可以首先简要解释为什么这是一个问题?从我可以看到,一旦使用保湿器就会删除查询,但是我不明白为什么这会在构建新查询时出现问题,即使重新使用保湿器也是如此.
感谢您的任何指示!
我创建了一个名为的抽象表单类AbstractApplicationForm.我希望通过Zend\ServiceManager\ServiceLocatorAwareInterface访问转换器来将服务定位器注入其中:
namespace Application\Form;
use Zend\Form\Form;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
abstract class AbstractApplicationForm
extends Form
implements ServiceLocatorAwareInterface
{
protected $serviceLocator;
protected $translator;
public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
{
$this->serviceLocator = $serviceLocator;
}
public function getServiceLocator()
{
return $this->serviceLocator;
}
public function getTranslator()
{
if (!$this->translator) {
$this->translator = $this->getServiceLocator()->get('translator');
}
return $this->translator;
}
}
Run Code Online (Sandbox Code Playgroud)
我的申请表扩展了这个类,如下所示:
namespace Trade\Form;
use Zend\Captcha;
use Zend\Captcha\Image;
use Zend\Form\Element;
use Application\Form\AbstractApplicationForm;
class MemberForm extends AbstractApplicationForm
{
public function init()
{
$this->setAttribute('method', 'post');
// Add …Run Code Online (Sandbox Code Playgroud) 我在尝试ORDER BY使用Doctrine 2 ORM 在DQL的子句中实现动态排序时遇到错误.
这是我的代码片段:
$queryBuilder = $categoryEntity->createQueryBuilder('category');
$queryBuilder->distinct();
$queryBuilder->join('Category\Entity\CategoryName', 'category_name', 'WITH', 'category.id = category_name.category');
if($column == 'status'){
$queryBuilder->orderBy("category.status $order");
}else{
$queryBuilder->orderBy("category_name.name $order");
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
[语法错误]第0行,第189列:错误:字符串的预期结束,得到'ASC'