0

遵循来自官方和非官方文档的许多教程,对于创建编辑实体和仅更新特定字段的通用方法没有如此清晰的愿景。

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

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

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

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

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

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

4

2 回答 2

0

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

这导致:

  1. 具有索引(列表)、视图(单个项目)、创建、更新和删除的控制器
  2. 包含所有实体字段的表单
  3. 查询实体的存储库(Doctrine)
  4. 持久化到数据库的服务(创建一个、保存一个或删除一个)

这将解决#1 和#2。由于 ZF2 过滤和水合的工作方式,这也将为您解决#4。然后,可以只设置一个选择号。要过滤的字段,但我还没有实现(还)。我只能参考手册来知道如何做到这一点。

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

于 2013-06-18T12:41:41.460 回答
-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;
?>

但是,这种转换有时很棘手。

于 2013-06-17T15:28:03.630 回答