【问题标题】:Is there a preferred way to store a user's preferences in a CakePHP application?在 CakePHP 应用程序中存储用户首选项是否有首选方法?
【发布时间】:2011-08-14 18:24:15
【问题描述】:

我想知道是否有一种被广泛接受的方式来将用户的偏好存储在 CakePHP 应用程序中。例如,我能想到的一些方法是:

  1. 将用户模型中的个别设置作为字段。
  2. 有一个带有键和值字段的首选项表。
  3. 有一个首选项表,每个用户有一个条目,首选项作为字段。 (我想和第一个类似)

对于可能会更改或扩展的应用程序(即可能考虑添加或删除首选项的应用程序),是否有更好的方法?

【问题讨论】:

    标签: php cakephp settings preferences


    【解决方案1】:

    您可能希望查看 CakeDC 的 Utils plugin 中的 KeyvalueBehavior 作为起点。

    将插件解压到Plugin/Utils/ 并创建一个名为preferences 的数据库表,其中包含以下字段:user_idfieldvalue

    <?php
    class Preference extends AppModel {
    
        $actsAs = array('Utils.Keyvalue');
    
    }
    

    然后您可以像这样保存和检索首选项(假设 User hasMany Preferences):

    $this->User->Preference->saveSection($this->Auth->user('id'), array(
        'Preference' => array(
            'dob' => 'mm/dd/yyyy',
            'gender' => 'm|f|n',
            'url' => 'http://www.example.com',
        )
    ), 'Profile');
    
    $this->User->Preference->getSection($this->Auth->user('id'), 'Profile');
    

    【讨论】:

    • 我想这与我的 #2 类似,但使用此插件可能会更简单,而不是自己管理所有首选项。我只是在考虑我需要的偏好数量以及这将占用几个用户的荒谬行数。我想知道每个用户拥有一行首选项是否更容易。如果要添加首选项,键/值行的优点是不需要更改表结构,但我喜欢为每个首选项设置一个具有非空值的字段的想法,因此我对每个首选项都有一个可靠的值.
    • 是的,这是方法#2。很大程度上取决于您决定偏好字段需要多灵活。
    • 我还没有决定,但我会接受这个作为答案,因为你给了我一个非常有效的替代方案,而不是我的想法。谢谢!
    【解决方案2】:

    如果您想在 Web 界面上添加或删除首选项(不更改数据库架构),那么您将需要第二个选项(EAV 模型)。缺点是查询会非常复杂。

    但如果偏好变化很少见,请执行第三次。

    【讨论】:

      【解决方案3】:

      您还可以考虑将与用户相关的非关键信息存储在 Cookie 中。如果使用寿命长,这可能就足够了。

      【讨论】:

      • 嗯,我更多地考虑与用户本身无关的信息,但更像是用户与应用程序交互的偏好(例如通知偏好)
      • 是的,这就是我的意思...可能非常适合存储在 Cookie 中,例如可隐藏框的状态、最喜欢的选项/链接等
      • 我知道这是旧的,但这是一个糟糕的建议。这样,用户首选项将仅存储在该特定浏览器上。如果用户在其他地方登录或清除他们的 cookie,他们的偏好(例如选择退出电子邮件)将会丢失。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      相关资源
      最近更新 更多