【问题标题】:How do I use a custom table instead of the standard CakeDC/Users table?如何使用自定义表而不是标准 CakeDC/Users 表?
【发布时间】:2017-01-09 10:23:45
【问题描述】:

我正在使用带有 CakeDC/Users 插件的 CakePHP,我想存储的不仅仅是注册时的标准用户详细信息。我以为我在这里找到了答案:https://github.com/CakeDC/users/blob/master/Docs/Documentation/Extending-the-Plugin.md#extending-the-model-tableentity,但这对我来说已经没有意义了。

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

  • 我的新表名为 site_users,我包含了所有标准的“用户”表字段以及我需要的其他字段。
  • 我创建了新的模型/表和模型/实体类
  • 我创建了一个新的 register.ctp 模板

...但在注册时,它仍在尝试更改标准 users 表,而不是我的新 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 表将由插件更新),或者我需要做什么才能以其他方式实现这一目标?

非常感谢

【问题讨论】:

    标签: cakephp cakedc


    【解决方案1】:

    请注意,如果您只需要添加几个额外的字段,则只需添加迁移并创建字段到用户表。

    $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');
    

    【讨论】:

    • 感谢您,但是,我最初按照您(和文档)描述的方式设置了站点,并更改了这些命令的顺序以反映我发现的类似示例。插件尝试更新哪个表都没有任何影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2018-12-31
    • 2015-03-13
    • 2017-12-21
    相关资源
    最近更新 更多