我无法弄清楚如何动态编辑验证规则,例如在我的控制器中.
我的情况:"users"表有"email"字段,其值在创建和更新时必须是"唯一的".现在没关系,我已经创建了正确的验证规则.
但现在我必须创建一个允许用户恢复密码的操作.因此,有一个表单,用户输入他们的电子邮件地址,并且必须验证此表单.之后,操作会检查是否有该电子邮件地址并发送电子邮件以重置密码.
所以:我必须使用验证规则验证表单,但在这种特殊情况下,我不需要电子邮件是"唯一的".
如何仅针对一个操作更改验证规则?
谢谢.
编辑
也许这个?
class UsersTable extends Table {
public function validationDefault(\Cake\Validation\Validator $validator) {
//Some rules...
$validator->add('email', [
'unique' => [
'message' => 'This value is already used',
'provider' => 'table',
'rule' => 'validateUnique'
]
]);
//Some rules...
return $validator;
}
public function validationOnlyCheck(\Cake\Validation\Validator $validator) {
$validator->remove('email', 'unique');
return $validator;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的行动中:
$user = $this->Users->newEntity($this->request->data(), [
'validate' => 'OnlyCheck'
]);
Run Code Online (Sandbox Code Playgroud) 我读过转换多个记录.现在我正试图从表单中一次保存多张照片.
附:
debug($this->request->data);
Run Code Online (Sandbox Code Playgroud)
我是这样的:
[
(int) 1 => [
'filename' => '25483_106728809362869_5795827_n.jpg',
'description' => '',
'album_id' => '2'
],
(int) 3 => [
'filename' => '44569_193398817463220_816845208_n.jpg',
'description' => '',
'album_id' => '1'
]
]
Run Code Online (Sandbox Code Playgroud)
好像没问题.
Bake为我创建了这个动作方法:
public function add() {
$photo = $this->Photos->newEntity();
if($this->request->is('post')) {
$photo = $this->Photos->patchEntity($photo, $this->request->data);
if($this->Photos->save($photo)) {
return $this->redirect(['action' => 'index']);
}
}
$this->set(compact('photo'));
}
Run Code Online (Sandbox Code Playgroud)
但CakeBook并没有很好地解释如何继续.我感觉我必须使用newEntities()和patchEntities(),但我不太明白怎么做.
例如:为什么newEntity()方法可以接受NULL,而方法newEntities()必然要一个参数?该save()方法一次只接受一个实体?那么,我必须为每个实体循环保存?
我可以举一个小例子吗?谢谢.
我正在开发一个PHP软件,可以从图像创建缩略图.
现在我需要确保成功创建缩略图,换句话说,初始图像已经正确调整大小/裁剪.
我认为只有一种方法可以做到这一点:我手动创建缩略图以与软件创建的缩略图进行比较.
但是怎么测试?
如果我assertFileEquals()用来比较我创建的缩略图和软件创建的缩略图,当然测试失败,即使两个图像相同.
我想,只要因为两个文件的创建日期不同或出于类似原因而发生这种情况.
那么,该怎么办?