我现在开始学习cakephp 3,他是测试版所以你的手册还没有完成..
我需要更改用户密码,但它触发了 Flash 错误。调试变量 $user 只显示“The Field Required”,但所有表的字段均为 NULL 值。
我的代码:
//Create a new Entity
$user = $this->Users->newEntity();
// Set new password and user's id... I'm not doing with session yet, ok?
$user = $this->Users->patchEntity($user, ['password' => $this->request->data['new-password'], 'id' => 2]);
debug($user->errors());
if ($this->Users->save($user)) {
$this->Flash->success('Its Right');
} else {
$this->Flash->error('FAIL');
}
调试 $user 它们是user表的字段。
[
'gym_id' => [
(int) 0 => 'This field is required'
],
'role_id' => [
(int) 0 => 'This field is required'
],
'name' => [
(int) 0 => 'This field is required'
],
'username' => [
(int) 0 => 'This field is required'
],
'stats' => [
(int) 0 => 'This field is required'
]
]
我的用户模型
public function validationDefault(Validator $validator)
{
$validator
->add('id', 'valid', ['rule' => 'numeric'])
->allowEmpty('id', 'create')
->add('gym_id', 'valid', ['rule' => 'numeric'])
->requirePresence('gym_id', 'create')
->notEmpty('gym_id')
->add('role_id', 'valid', ['rule' => 'numeric'])
->requirePresence('role_id', 'create')
->notEmpty('role_id')
->requirePresence('name', 'create')
->notEmpty('name')
->requirePresence('username', 'create')
->notEmpty('username')
->requirePresence('password', 'create')
->notEmpty('password')
->add('stats', 'valid', ['rule' => 'numeric'])
->requirePresence('stats', 'create')
->notEmpty('stats');
return $validator;
}
已解决
根据文档,为您创建了 patchEntity 以使用现有实体,创建一个新实体我将在数据库中创建一行,然后解决方案是:
只需更新 UsersController,使用具有您要更新的用户 ID 的实体
用户 Controller
$user_data = $this->Users
->find()
->where(['id' => 2])
->first();
$user = $this->Users->patchEntity($user_data,
[
'password' => $this->request->data['new-password']
]);
/*debug($user);
exit();*/
if ($this->Users->save($user)) {
$this->Flash->success('Success, GG EASY');
} else {
$this->Flash->error('FAIL, SurrenderAt20');
}
谢谢大家^^
最佳答案
您要求这些字段存在,所以这是预期的行为。根据您的意见,将 requirePresence() 的第二个参数设置为 "false" 不会执行任何操作,因为它是一个字符串,如果您想禁用它检查您是否必须提供一个 bool 值,即 false 不带引号。但是,这只会弄乱您的默认验证。
话虽这么说,但有多种方法可以解决字段并不总是必需的“问题”,其中一种方法是使用一组单独的验证规则,例如:
public function validationUpdatePassword(Validator $validator)
{
$validator
->add('id', 'valid', ['rule' => 'numeric'])
->requirePresence('id')
// you might want to add some actual password validation here
->requirePresence('password')
->notEmpty('password');
return $validator;
}
$user = $this->Users->patchEntity($user, [
'password' => $this->request->data['new-password'],
'id' => 2
], [
'validate' => 'updatePassword'
]);
另见
关于php - CakePHP 3 - 更改密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303020/
如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe
假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO
我正在使用Watir运行一个Ruby脚本来为我自动化一些事情。我试图自动将一些文件保存到某个目录。因此,在我的Mozilla设置中,我将默认下载目录设置为桌面并选择自动保存文件。但是,当我开始运行我的脚本时,这些更改并没有反射(reflect)出来。似乎首选项恢复为默认值。我已经包括以下内容require"rubygems"#Optional.require"watir-webdriver"#Forwebautomation.require"win32ole"#Forfilesavedialog.并打开一个新的firefox实例:browser=Watir::Browser.new(:
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
有没有办法在Rails中为确认字段自定义消息?例如在设计中我必须输入密码和password_confirmation并且错误消息是:Passwordconfirmationdoesn'tmatchPassword我可以更改事件记录语言环境消息(“不匹配”),但它会在该语言环境消息的开头和结尾输出密码确认和密码,所以我得到如下内容:"PasswordconfirmationmustmatchPassword"有没有办法将其更改为不同的字符串?PasswordconfirmationandPasswordmustmatch.编辑另一件事是拥有完全自定义的消息,例如:'Setpassword