如何使用自定义表而不是标准的CakeDC / Users表?

时间:2017-01-09 10:23:45

标签: cakephp cakedc

我将CakePHP与CakeDC / Users插件一起使用,我希望在注册时不仅存储标准用户详细信息。我以为我在这里得到了答案:https://github.com/CakeDC/users/blob/master/Docs/Documentation/Extending-the-Plugin.md#extending-the-model-tableentity,但那件事对我来说再也没有意义了。

我按照文档中的建议将其设置为网站:

  • 我的新表名是site_users,我包含了所有标准用户'表字段,以及我需要的其他字段。
  • 我创建了新的Model / Table和Model / Entity类
  • 我创建了一个新的register.ctp模板

...但在注册时,它仍在尝试更改标准用户表,而不是我的新site_users表。

这是新的实体文件,其中包含site_users表中的字段列表:

namespace App\Model\Entity;
use CakeDC\Users\Model\Entity\User;

/**
 * SiteUser Entity
 *
 * @property int $id
 * @property string $first_name
 * @property string $last_name
 * @property string $email
 * @property string $company
 * @property string $abn
 * @property string $ngr
 * @property \Cake\I18n\Time $date_registered
 * @property string $street_address
 * @property string $suburb
 * @property string $region
 * @property string $state
 * @property string $postcode
 * @property string $mobile
 * @property string $landline
 * @property string $fax
 * @property string $username
 * @property string $password
 * @property string $receive_marketing
 * @property string $ngr_confirmed
 * @property int $site_user_group_id
 * @property string $token
 * @property \Cake\I18n\Time $token_expires
 * @property string $api_token
 * @property \Cake\I18n\Time $activation_date
 * @property \Cake\I18n\Time $tos_date
 * @property bool $active
 * @property bool $is_superuser
 * @property string $role
 * @property \Cake\I18n\Time $created
 * @property \Cake\I18n\Time $modified
 *
 * @property \App\Model\Entity\SiteUserGroup $site_user_group
 */
class SiteUser extends User
{

protected $_accessible = [
    '*' => true,
    'id' => false,
    'role' => false,
];

}

这是新的表格文件:

namespace App\Model\Table;

use CakeDC\Users\Model\Table\UsersTable;

class SiteUsersTable extends UsersTable
{

}

bootstrap.php包含以下行:

Configure::write('Users.config', ['users']);
Plugin::load('CakeDC/Users', ['routes' => true, 'bootstrap' => true]);

而且users.php有这个:

return [
'Users.table' => 'SiteUsers',
];

我觉得我只是不理解这一点,但似乎应该是一个足够普遍的要求,至少在那里是一个不错的例子。

有人能告诉我为什么我所做的更改没有达到我期望的效果(site_users表会被插件更新),或者我需要做些什么才能以另一种方式实现这一点? / p>

非常感谢

1 个答案:

答案 0 :(得分:1)

请注意,如果您只需添加一些额外字段,则只需添加迁移并为users表创建字段。

$this->table('site_users');添加到新的表初始化方法中,让CakePHP知道您将使用具有其他名称的表(不是“用户”)

看起来您正在以错误的顺序加载插件配置覆盖,请在您的bootstrap.php文件中尝试此操作

Configure::write('Users.config', ['users']);
Plugin::load('CakeDC/Users', ['routes' => true, 'bootstrap' => true]);

正如此处记录https://github.com/CakeDC/users/blob/master/Docs/Documentation/Configuration.md

或者你可以用这种方式加载插件后覆盖这个配置:

Configure::write('Users.table', 'SiteUsers');