是否有其他人使用DB-Schema-Validation进行MVC项目?

时间:2009-08-03 16:43:11

标签: php database model-view-controller

好的,部分受到CakePHP模型验证的启发,我创建了一个使用单独数据库模式文件的项目。我不喜欢CakePHP中的模型文件和db-schema组合在同一个php文件中。我喜欢将它们分开。

此架构首先传递了我的所有sql更新,插入和删除。我编写了update()insert()delete()函数来自动执行此验证。

为什么呢?因为我可以接受来自访问者的帖子并将未检查的数据发送到我的数据库而无需检查它。我的架构过滤了无辜而不是无辜的违规行为。

以下是数据库架构的示例:

<?php
$schemas    = array('database_name_hidden'=>array(
'assigned_weeks'=>array(
    'id'=>array('id'),
    'user_id'=>array('foreign_id','users'),
    'week_number'=>array('posint'),
    'year'=>array('posint'),
    'unit_id'=>array('foreign_id','units'),
    'claim_listing'=>array('posint'),
    'created'=>array('created'),
    'modified'=>array('modified'),
    'resort_id'=>array('foreign_id','resorts','required'),
),

'trade_listings'=>array(
    'id'=>array('id'),
    'assigned_week_id'=>array('foreign_id', 'assigned_weeks','required'),
    'listing_assigned_week_id'=>array('foreign_id', 'assigned_weeks'),
    'opposite_id'=>array('numeric'),
    'listed'=>array('bool'),
    'prev_id'=>array('foreign_id','trade_listings'),
    'next_id'=>array('foreign_id','trade_listings'),
    'listing_email'=>array('email'),
    'listing_description'=>array('text'),
    'trade_confirmation_number'=>array('text'),
    'external_resort_id'=>array('foreign_id','resorts'),
    'external_unit_number'=>array('text','size'=>array(1,6)),
    'external_start_time'=>array('time_future',),
    'external_end_time'=>array('time_future'),
    'admin_comment'=>array('text'),
    'comment'=>array('text'),
    'created'=>array('created'),
    'creator'=>array('creator'),
    'modified'=>array('modified'),
    'modifier'=>array('modifier'),
    'resort_id'=>array('foreign_id','resorts','required'),
),
);
?>

其他人做过这样的事情吗?

1 个答案:

答案 0 :(得分:1)

我不确定我是否真的理解这个问题,但谈到数据库,验证,架构和PHP,我真的很喜欢名为Doctrine的ORM框架。

(它是PHP框架symfony的默认ORM堆栈,顺便说一句;但是可以很容易地与其他框架集成 - 例如我已经将它与Zend Framework一起使用了)

它的网站现在似乎已经停止了(他们一直在试验一些高负荷相关的问题,那些是上周),但是它提供了基于数据验证的类/方法在将数据插入数据库之前,在描述模式的YAML文件上。

你可能想看看它......