使用模型规则CakePHP验证URL参数
我刚刚写了我的第一篇文章,所以如果我做错了什么,请告诉我! 我的问题是:我想验证url提供的数据 。/log/requests?from=2011-10-18T16:15:00&to=2011-10-18T16:30:00&fmt=csv 我刚刚发现,有一个选项可以使用添加到模型中的规则进行验证使用模型规则CakePHP验证URL参数,php,validation,cakephp,Php,Validation,Cakephp,我刚刚写了我的第一篇文章,所以如果我做错了什么,请告诉我! 我的问题是:我想验证url提供的数据 。/log/requests?from=2011-10-18T16:15:00&to=2011-10-18T16:30:00&fmt=csv 我刚刚发现,有一个选项可以使用添加到模型中的规则进行验证 public $validate = array( 'request_id' => array( 'alphaNumeric' => array(
public $validate = array(
'request_id' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'required' => true,
'message' => 'Alphabets and numbers only'
),
)
);
在控制器中使用“ModelName->set($params)”,然后“ModelName->validates()”-函数应传递答案(如果其有效或无效)。我的解决方案与当前解决方案的唯一区别
我的控制器使用了几个模型来收集响应数据。
问题是“validates()”-函数只返回“valid”,即使我输入了特殊字符或其他应该是“无效”的内容,也会返回“valid”——由模型规则签名。
救命啊 这不是答案,而是为了帮助OP而添加的
我已经创建了一个测试控制器/模型来测试您的情况。我故意没有扩展'AppController'/'AppModel'来删除那些导致问题的代码
我的测试模型(app/model/Some.php)
我的测试控制器(app/controller/SomeController.php)
产出:
\app\Controller\SomeController.php (line 32)
false
\app\Controller\SomeController.php (line 37)
true
此测试设置似乎按计划工作,因此您可以尝试在应用程序中测试这些设置,以缩小问题的原因。可能某个行为附加到您的AppModel,其中包含“beforeValidate()”回调并禁用请求id字段的验证?能否将
$params
变量的内容添加到您的问题中?您可能需要向$params数组添加ModelAlias密钥,如下所示<代码>$params=array('MyModelAlias'=>$params)代码>我刚刚用这个“$params=array('request_id'=>'4*G/&2')测试了它。我只是想稍后验证和选择。(感谢您的快速响应:)$params=array('request_id'=>'4*G/&2')
有效吗?如果没有,试试这个<代码>$params=array('ModelName'=>array('request_id'=>'4*G/&2')代码>。您可以在不保存数据的情况下手动“验证”数据,这是正确的,但是,模型将在“参数”数据中查找以模型的“别名”(例如“ModelName”)命名的键,并且仅验证该键内的字段。如果ModelAlias密钥丢失,它将找不到要验证的“字段”。我将其更改为“$params=array('LogBackend'=>array('request_id'=>'4*G/&2');”
class SomeController extends Controller
{
public $uses = array('Some');
public function index()
{
$this->autoRender = false;
$params = array('Some' => array('request_id'=>'4*G/&2'));
$this->Some->set($params);
$result = $this->Some->validates();
debug($result);
$params = array('Some' => array('request_id'=>'AAAA'));
$this->Some->set($params);
$result = $this->Some->validates();
debug($result);
}
}
\app\Controller\SomeController.php (line 32)
false
\app\Controller\SomeController.php (line 37)
true