【问题标题】:cakephp custom class or helper?cakephp 自定义类或助手?
【发布时间】:2012-08-19 23:30:33
【问题描述】:

我目前有一个正在工作的作家 MVC。我有一个名字和姓氏属性。在索引上我想显示全名。我知道这可以通过多种方式完成。

我可以在视图中写逻辑

echo $writer['Writer']['firstname'] . " " . $writer['Writer']['lastname'];

我可以编写一个辅助函数来执行此操作并保持我的视图干净。这就是我目前的做法。

echo fullName($writer['Writer']['firstname'], $writer['Writer']['lastname']);

我想知道创建一个具有全名方法的编写器类是否更好。然后我可以进一步简化我的观点。

echo $writer->fullname

所以,我知道如何编写帮助程序并且这很有效,假设构建一个类是要走的路,什么时候是正确的时间,在查询实例化每个对象之后?我假设在控制器中。此外,我的班级会住在哪里?

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    另一种方法是在 Writer 模型中创建一个虚拟字段:

    public $virtualFields = array(
        'full_name'=>"CONCAT(Writer.first_name, ' ', Writer.last_name)"
    );
    

    然后输出:

    echo h($writer['Writer']['full_name']);
    

    【讨论】:

    • 这正是我所采用的。谢谢大家! Mark 的帖子让我走上了“你可能想要使用模型层进行连接”的道路。
    【解决方案2】:

    在您的 View/Helper/ 中创建一个助手 CustomHelper(您喜欢的任何东西)。 然后是一个方法fullName:

     public function fullName($writer) {
        return $writer['first_name'] . ' ' . $writer['last_name'];
     }
    
    // in your view
    echo h($this->Custom->fullName($writer['Writer']));
    

    您也可以在 find() 上进行格式化。 这取决于您将在哪里使用它。如果仅与视图相关,则助手就足够了。如果您在控制器/模型级别需要它,您可能希望使用模型层进行连接。

    【讨论】:

    • 谢谢,有时候看到的东西是最好的老师。我从来不知道我可以通过 $writer['Writer'] 并且仍然可以访问所有详细信息。
    • 你也可以只传递 $writer 并访问它,包括模型名称。如果您需要做跨模型的东西,那将是最好的解决方案。还要注意 h() 通过转义名称来保护您的视图。
    • 马克再次感谢,您最初的帖子刺激了更多搜索,但帮助指导了我需要的方向(模型虚拟字段)
    • 好吧,我也考虑过虚拟字段,但我通常喜欢使用智能方法来连接,因此行为等如果姓氏为空等,你不想要额外的空间。我发现这里的虚拟字段在逻辑上过于严格。
    • 这就是我所拥有的虚拟字段。我想到了没有姓氏的作品,并认为 Trim 会解决这个问题。 public $virtualFields = array('full_name' => 'trim(CONCAT(Writer.firstname, " ", Writer.lastname))');
    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 2014-08-08
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    相关资源
    最近更新 更多