小编Ray*_*Air的帖子

上传后使用LiipImagineBundle调整图像大小?

我正在使用带有Symfony 2.1 的LiipImagineBundle,并希望在上传后重新调整用户上传的图像,然后将它们保存到永久文件系统位置(剥离元数据,强制使用jpeg格式,并限制文件大小).我必须从控制器调用'strip'和'resize'过滤器,然后将过滤后的图像从临时位置保存到我在文件系统中选择的文件夹中.

我尝试使用LiipImageBundle控制器作为捆绑软件自述文件中指示的服务,但被调用的Action主要用于在请求显示图像时在缓存目录中创建过滤后的图像(在上传过程中使用它进行过滤是另一种情况) ).无论如何我试着按照以下方式实现它,并让它工作.我必须先将文件从Web服务器的php临时目录移动到web文件夹中的目录才能应用过滤器.其次,我应用了过滤器并删除了(unlink())初始未过滤的文件.最后,我不得不将过滤后的文件(重命名())移动到文件系统中的永久位置.有必要将文件移动两次,应用过滤器一次,并删除(取消链接)1文件以使其全部工作.是否有更好的方法(不需要中间移动)在上传时使用捆绑包?

class MyController extends Controller
{
    public function new_imageAction(Request $request)
    {
        $uploadedFile = $request->files->get('file');
        $tmpFolderPathAbs = $this->get('kernel')->getRootDir() . '/../web/uploads/tmp/';
        $tmpImageNameNoExt = rand();
        $tmpImageName = $tmpImageNameNoExt . '.' . $fileExtension;
        $uploadedFile->move($tmpFolderPathAbs, $tmpImageName);
        $tmpImagePathRel = '/uploads/tmp/' . $tmpImageName;
        // Create the filtered image in a tmp folder:
        $this->container->get('liip_imagine.controller')->filterAction($request, $tmpImagePathRel, 'my_filter');
        unlink($tmpFolderPathAbs . $tmpImageName);
        $filteredImagePathAbs = $this->get('kernel')->getRootDir() . '/../web/uploads/cache/my_filter/uploads/tmp/' . $tmpImageNameNoExt . '.jpeg';
        $imagePath = $imageManagerResponse->headers->get('location');
        // define permanent location ($permanentImagePathAbs)...
        rename($filteredImagePathAbs, $permanentImagePathAbs);
    }
} …
Run Code Online (Sandbox Code Playgroud)

symfony liipimaginebundle

19
推荐指数
2
解决办法
2万
查看次数

如何在Symfony2表单中为集合添加自动完成字段并使用Propel?

我正在使用带有PropelBundle的Symfony 2.1表单,我正在尝试重构一个具有下拉列表对象(从中选择)的表单,而不是使用jquery自动完成字段(使用AJAX).对于下拉列表,我在表单类型中使用以下代码(对于下拉列表非常有效):

$builder->add('books', 'collection', array(
    'type'          => 'model',
    'options'       => array(
        'class'     => 'MyVendor\MyBundle\Model\Book',
        'property'  => 'title',
    ),
    'allow_add'     => true,
    'allow_delete'  => true,
    'by_reference'  => false,
    'required'      => false,
));
Run Code Online (Sandbox Code Playgroud)

对于给一点背景知识的缘故,让我们说,我们正在创造一个新的"阅读器"对象,我们想从现有的"书"对象的列表中选择读者喜爱的书籍.使用集合类型,以便可以在新的"阅读器"表单中选择许多"最喜欢的书籍".现在,我想更改上面的内容以使用自动完成功能.为此,我尝试实现一个Data Transformer,以便能够从简单的文本字段获取Book对象,该文本字段可用于自动完成功能,以传递本问题答案中指示的Book ID .但是,我无法弄清楚如何使Data Transformer与集合类型和Propel类一起工作.我创建了一个BookToIdTransformer类,如Symfony Cookbook中所示,并在"ReaderType"文件中尝试了以下内容:

$transformer = new BookToIdTransformer();
$builder->add(
        $builder->create('books', 'collection', array(
            'type'          => 'text',
            'allow_add'     => true,
            'allow_delete'  => true,
            'by_reference'  => false,
            'required'      => false,
        ))->addModelTransformer($transformer)
);
Run Code Online (Sandbox Code Playgroud)

有了上面的内容,我得到了一个"调用未定义的方法:getId"异常(显然,Transformer期望一个PropelCollection of Books,而不是一个Book对象......).有谁知道如何去做?或者让我知道是否有其他方法可以使用Propel在Symfony中实现自动完成并允许选择多个对象(例如书籍集合)?

propel symfony-forms symfony-2.1

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

如何通过推进对象集合中的"id"获取对象?

我正在使用Propel 1.6并且我不确定如何从推进对象集合中获取对象(给定其"id"属性值).我在Propel的文档中找不到直接的答案(PropelCollection方法似乎不适用?).例如:假设我有一个"Person"表,其中包含以下模式:

<table name="person">
  <column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
  <column name="name" type="VARCHAR" size="100" required="true"/>
</table>
Run Code Online (Sandbox Code Playgroud)

我执行以下查询以获取"Person"对象的集合:

$persons = PersonQuery::create()->find();
Run Code Online (Sandbox Code Playgroud)

然后,我想找到一个具有给定"id"的"Person"对象(例如"Person",其中"id = 3"),而不对数据库进行新的查询.我该怎么做?

$persons->get(...?)?
Run Code Online (Sandbox Code Playgroud)

换句话说,我不想这样做:

$personX = PersonQuery::create()->findOneById(3);
Run Code Online (Sandbox Code Playgroud)

语境:

我想阻止进行数据库查询以提高性能.该语句将插入到foreach语句中,否则将导致大量数据库连接,如下所示:

foreach ($books as $book) {
    $book['author_name'] = PersonQuery::create()->findOneById($book['author_id'])->getName();
}
Run Code Online (Sandbox Code Playgroud)

php propel

8
推荐指数
2
解决办法
4651
查看次数

Elastica:检查Id x文档是否存在的最佳方法?

使用PHP Elastica库,我想知道检查Id = 1的文档是否存在的最佳方法是什么?

我做的如下:

$docPre = $elasticaType->getDocument(1);
if ($docPre) {
    //do some stuff...
} else {
    //do something else...
}
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码不起作用,因为如果文档不存在,则getDocument()方法抛出NotFoundException.

或者,我可以使用以下内容进行类型"搜索":

$elasticaQueryString = new \Elastica\Query\QueryString();
$elasticaQueryString->setParam('id', 1);
$elasticaQuery = new \Elastica\Query();
$elasticaQuery->setQuery($elasticaQueryString);
$resultSet = $elasticaType->search($elasticaQuery);
$count = $resultSet->count();
if ($count > 0) {
    //do some stuff...
} else {
    //do something else...
}
Run Code Online (Sandbox Code Playgroud)

但是,上面看起来相当麻烦......有什么更好的方法? 这个问题适用于ElasticSearch,其中一个答案表明我的第一种方法(相当于使用getDocument).但是,我不希望抛出异常,因为使用Elastica就是这种情况......

elastica

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

带有"Combobox"功能的jQuery Tokeninput?

我正在使用Loopj Tokeninput插件,我想知道是否有人在其中实现了jQuery"combobox"功能?或类似的东西?范围是允许通过单击"向下箭头"或仅通过单击输入字段显示来自本地源的所有数据,就像下拉菜单一样(但允许在键入内容时将其缩小...).如果是这样,有人可以分享如何实施它吗?

jquery jquery-plugins jquery-tokeninput

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