- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 cakephp 3.5(今天运行更新)制作我的第一个非教程 Web 应用程序。我正在尝试设置我的应用程序,以便我可以编辑我的用户帐户详细信息(用户名和密码)。我不确定我做了什么,但我在登录时实际上无法访问我的 edit.ctp( View )。我不断收到“无法找到当前实体的表类”错误。
我最终的目标是让用户能够在需要时编辑他们的用户名(这是一个电子邮件地址)并更改他们的密码。
有人可以帮我解决我出错的地方,为什么我总是收到“无法找到当前实体的表类”错误以及我可以做些什么来修复它。我已经阅读了尽可能多的相关文章。我已经尝试了各种“isAuthorised”功能版本,但我不断收到相同的错误,所以我确信这是我不知道要寻找什么的东西。
下面是我的代码:
The User.php file:
<?php
namespace App\Model\Entity;
use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;
/**
* User Entity.
*
* @property int $id
* @property string $username
* @property string $password
* @property string $role
* @property \Cake\I18n\Time $created
* @property \Cake\I18n\Time $activity_date
* @property bool $terms_of_service
* @property bool $paid
* @property \Cake\I18n\Time $paid_date
* @property \Cake\I18n\Time $paid_until
* @property bool $verified
* @property \App\Model\Entity\Agent[] $agents
*/
class User extends Entity
{
/**
* Fields that can be mass assigned using newEntity() or patchEntity().
*
* Note that when '*' is set to true, this allows all unspecified fields to
* be mass assigned. For security purposes, it is advised to set '*' to false
* (or remove it), and explicitly make individual fields accessible as needed.
*
* @var array
*/
protected $_accessible = [
'*' => true,
'id' => false,
];
protected function _setPassword($password)
{
return (new DefaultPasswordHasher)->hash($password);
}
}
The UsersTable.php file:
<?php
namespace App\Model\Table;
use App\Model\Entity\User;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
/**
* Users Model
*
* @property \Cake\ORM\Association\HasMany $Agents
*/
class UsersTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
parent::initialize($config);
$this->table('users');
$this->displayField('username');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->hasMany('Agents', [
'foreignKey' => 'user_id'
]);
}
/**
* Default validation rules.
*
* @param \Cake\Validation\Validator $validator Validator instance.
* @return \Cake\Validation\Validator
*/
public function validationDefault(Validator $validator)
{
$validator
->notEmpty('username','Please supply your email address')
->add('username', 'valid', ['rule'=>'email']);
$validator
->notEmpty('password','Please supply your password');
$validator
->notEmpty('role','Please select your account type')
->add('role','inList',[
'rule' => ['inList',['agent','buyer']],
'message' => 'Please select a valid role'
]);
$validator
->add('terms_of_service', 'valid', ['rule' => 'boolean'])
->notEmpty('terms_of_service','You must agree to the terms of service to register');
return $validator;
}
public function isOwnedBy($userId)
{
return $this->exists(['id' => $userId]);
}
/**
* Returns a rules checker object that will be used for validating
* application integrity.
*
* @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
* @return \Cake\ORM\RulesChecker
*/
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->isUnique(['username']));
return $rules;
}
}
The relevant pieces UsersController.php file:
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
use Cake\Event\Event;
//use Cake\ORM\Entity;
/**
* Users Controller
*
* @property \App\Model\Table\UsersTable $Users
*/
class UsersController extends AppController
{
public function beforeFilter(Event $event)
{
parent::beforeFilter($event);
$this->Auth->allow(['signup','logout']);
$this->Auth->deny(['index']);
}
// The owner of an user can edit and delete it
public function isAuthorized($user)
{
if (in_array($this->request->action, ['edit', 'delete','view'])) {
if ($this->Users->isOwnedBy($user['id'])) {
return true;
}
}
return parent::isAuthorized($user);
}
/**
* Edit method
*
* @param string|null $id User id.
* @return void Redirects on successful edit, renders view otherwise.
* @throws \Cake\Network\Exception\NotFoundException When record not found.
*/
public function edit($id = null)
{
$id = $this->Auth->user('id');
$user = $this->Users->get($id, [
'contain' => []
]);
if ($this->request->is(['patch', 'post', 'put'])) {
$user = $this->Users->patchEntity($user, $this->request->data);
if ($this->Users->save($user)) {
$this->Flash->success(__('Your account has been edited.'));
return $this->redirect(['controller','Users','action' => 'edit']);
} else {
$this->Flash->error(__('The user could not be saved. Please, try again.'));
}
}
$this->set(compact('user'));
$this->set('_serialize', ['user']);
}
The AppController.php file
<?php
/**
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @since 0.2.9
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
/**
* Application Controller
*
* Add your application-wide methods in the class below, your controllers
* will inherit them.
*
* @link http://book.cakephp.org/3.0/en/controllers.html#the-app-controller
*/
class AppController extends Controller
{
/**
* Initialization hook method.
*
* Use this method to add common initialization code like loading components.
*
* e.g. `$this->loadComponent('Security');`
*
* @return void
*/
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
/*'authenticate' => [
'Form' => [
'fields' => ['username' => 'email', 'password' => 'password']
]
],*/
'authorize' => 'Controller',
'loginRedirect' => [
'controller' => 'Properties',
'action' => 'myproperties'
],
'logoutRedirect' => [
'controller' => '',
'action' => 'index'
],
'unauthorizedRedirect' => $this->referer(),
//'authError' => 'You must be logged in to view that page.',
]);
// Allow the display action so our pages controller continues to work
$this->Auth->allow(['display']);
}
public function beforeFilter(Event $event)
{
$this->Auth->allow(['index', 'view','logout','search']);
}
/**
* Before render callback.
*
* @param \Cake\Event\Event $event The beforeRender event.
* @return void
*/
public function beforeRender(Event $event)
{
if (!array_key_exists('_serialize', $this->viewVars) &&
in_array($this->response->type(), ['application/json', 'application/xml'])
) {
$this->set('_serialize', true);
}
$this -> set('user', $this -> Auth -> user());
}
public function isAuthorized($user) {
$childClass = get_called_class();
if(method_exists($childClass, '_isAuthorized'))
return $childClass::_isAuthorized($user, $this -> request);
return static::_isAuthorized($user, $request);
}
static public function _isAuthorized($user, $request)
{
// Admin can access every action
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
// Default deny
return false;
}
}
最佳答案
问题是在 beforeRender
方法中的 AppController
中你有这个..
$this -> set('user', $this -> Auth -> user());
这意味着您将与所有 Controller 和操作共享当前登录的用户..
还要注意,在用户 Controller 中的编辑操作中,您还调用了一个变量 $user
并通过 set
将其发送到 View ...
所以这就是你的问题的根源,这就是为什么如果你通过 users
更改名称它有效!似乎在 beforeRender
方法中发送的 $user
与在用户 Controller 中的编辑操作中发送的 $user
之间存在冲突
关于php - cakephp 3 编辑用户用户名和密码 - 无法找到当前实体的表类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34025290/
都是整数,但一直报错 "Only assignment, call, increment, decrement, await, and new object expressions can be us
我有以下情况:一个“对话”实体/表,它有多个关联的标签。Tag 也是一个实体/表 - key/id 是 tagName(一个字符串)。 在客户端 (javascript),我在处理标签时使用字符串数组
我想通过 maven java 源代码生成器自动生成 java 源代码。我想通过查看一个大实体 xml 文件来创建实体类,该文件将包含系统中的所有实体和实体关系。据我搜索,目前maven中没有这样的插
我有一段时间有这个疑问,有人说 EJB 3.0 中没有所谓的实体 bean。有没有可能这样说,EJB 3.0 使用 JPA 来持久化数据并且没有对以前版本(EJB 2.1)中的实体 bean 进行增强
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
实体(entites) 用于定义引用普通文本或特殊字符的快捷方式的变量,可在内部或外部进行声明 实体引用是对实体的引用 声明一个内部实体 语法: <!ENTITY 实体名称 "
This page建议 !ENTITY: If you want to avoid duplication, consider using XML entities (for example, [ ]
我正在努力解决这个问题:如何判断一个概念是聚合根还是只是一个实体(属于 AR 的一部分)? : 他们都有 ID 它们都是由实体或值对象组成 也许如果我需要引用其他 AR 中的实体,那么我需要将其设为
我使用 Symfony2 和 Doctrine,我有一个关于实体的问题。 出于性能方面的考虑,我想知道是否可以在不进行所有关联的情况下使用实体? 目前,我还没有找到另一种方法来创建继承带有关联的类的模
我已经尝试在 HTML 中包含以下代码,用于附加文件符号。但它显示一个空的白框。 📎 📎 📎 是否有替代的 HTML 附加文件符号实体? 如果没有,我们可以手动创建
我在 grails 中有一个域类......我如何让 gorm 在创建数据库时忽略这个实体?就别管它了。 最佳答案 如果我理解,你不想从域类创建表?如果是,请在域类中使用此代码: static map
我正在努力解决这个问题:如何判断一个概念是聚合根还是只是一个实体(属于 AR 的一部分)? : 他们都有 ID 它们都是由实体或值对象组成 也许如果我需要引用其他 AR 中的实体,那么我需要将其设为
我已经尝试在 HTML 中包含以下代码,用于附加文件符号。但它显示一个空的白框。 📎 📎 📎 是否有替代的 HTML 附加文件符号实体? 如果没有,我们可以手动创建
如何在我的实体中以 14-04-2017 格式存储日期? 但我必须从字符串中解析它。 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-
我需要从两个连接表中获取数据。数据集是什么类型?我是否需要创建一个包含这两个表中的属性的类以用于数据集类型,或者我可以使用实体模式中的类型。我如何修改我的方法才能正常工作? public static
好的,我们正在尝试建立一个中央站点来查看来自销售我们产品的多个供应商的数据。这些多个供应商使用不同的销售系统(确切地说是两个不同的系统),因此每个数据库看起来完全不同。我们与他们的数据库同步,因此数据
我是 backbone 的新手。但是当我研究模型实体时,我不明白一些事情。如果我们可以像 java 或 C# 这样的标准语言一样定义模型属性,那就太好了。有没有可能是这样的。所以我的想法是这样的: M
我想获取存储在可绘制的 xml 文件中的形状的颜色。 我来到了将 Drawable 存储在 Drawable 变量中的步骤,所以,现在我想获取形状的颜色(纯色标签)。 有什么建议吗? 最佳答案 Gra
实体是直接映射到我们的数据库(我们用于 Hibernate)的类。 在调用 DAO 之前,我们的服务类包含这些实体的业务逻辑。 我们还有命令对象,它们是与特定 View 相关的 POJO。有人告诉我实
在我的应用程序中,我需要显示不同存储过程返回的记录列表。每个存储过程返回不同类型的记录(即列数和列类型不同)。 我最初的想法是为每种类型的记录创建一个类,并创建一个函数来执行相应的存储过程并返回 Li
我是一名优秀的程序员,十分优秀!