CRUD方法练习

时间:2013-06-17 15:09:47

标签: zend-framework2

在官方和非官方文档的许多教程之后,对于创建编辑实体和仅更新特定字段的常用方法没有这样明确的愿景。

主要问题是: 1 - 创建实体 - 填写表单,验证,创建实体对象并使用exchangeArray填充它然后保存,通过docs保存方法我们必须从传递的对象配置数组,如:

$data = array(
            'artist' => $album->artist,
            'title'  => $album->title,
        );

我们可以在save方法中避免重新配置这个数组吗?

2 - 更新实体 - 相同的逻辑

3 - 如果我们只想更新一个特定字段怎么办? 我将数组传递给updateEntity方法,但传递对象(并在方法中配置数组)以保存方法并将数组传递给更新方法是正常的方法吗?

4 - 几乎与3相同但现在问题是当我们的实体字段键中有另一个键的数组时,我们可以使用hydrator剥离'坏'数组键并制作类似array_intersect样式的东西,但是你的建议是什么? / p>

2 个答案:

答案 0 :(得分:0)

您可以使用实体,表单,输入过滤器和水合器的智能组合,几乎没有逻辑来完成CRUD操作。对于管理界面,我通常生成我的控制器,表单和其他类。我使用Sublime Text 2,可以在我的repository中找到生成这些类的片段。

这导致:

  1. 具有索引(列表),视图(单个项目),创建,更新和删除的控制器
  2. 包含所有实体字段的表单
  3. 查询实体的存储库(Doctrine)
  4. 要保留到数据库的服务(创建一个,保存一个或删除一个)
  5. 这将解决#1和#2。由于ZF2过滤和水合作用的方式,这也将为您解决#4。然后,可以仅设置选择号。要过滤的字段,但我还没有实现(尚)。我只能参考the manual知道如何做到这一点。

    如果您想了解上述代码段的实现,请查看使用类似策略的Soflomo\Portfolio

答案 1 :(得分:-3)

与其他语言相反,PHP以数组为中心而非以对象为中心。大多数任务都可以通过Array完成。在这种情况下,而不是使用

<?php
class SomeClass {
    public $artist;
    public $title;
}
$album=new SomeClass();
$data = array(
        'artist' => $album->artist,
        'title'  => $album->title,
    );
?>

我们应该使用

<?
$SomeObject=array("artist"=>xxx,"title"=>xxxx);

$data = $someObject;
?>

即。我们应该避免在引用POCO类时使用类,而应该使用(不太优雅)的数组。否则,有时我们将被迫在数组和对象之间进行这种转换。

无论如何,我们需要将它作为对象保存,然后,我们可以使用以下方法进行对象到数组之间的转换:

<?php
class SomeClass {
    public $artist;
    public $title;
}
$album=new SomeClass();
$data = (array)$album;
?>

然而,这种转换有时很棘手。