我应该在哪里存储从模型数据中打印组合字符串的函数?

时间:2014-12-13 13:26:20

标签: php laravel laravel-4 eloquent

我有一个ProductsController和Product模型。产品包含以下字段:

  • ID
  • PARENT_ID
  • 名称
  • (更多与该问题无关的字段)

产品可以是其他产品的儿童。这允许产品基本上继承父产品的属性(名称,照片,重量等)。

在我的模板中打印产品名称非常简单:

{{ $product->name }}

但是,我还希望在许多(但不是全部)情况下执行以下操作:

  • 如果子产品名称为空,请使用父产品名称
  • 当数量>时追加(包装' n') 1

由于我经常在我的代码中使用它,而不是在我的刀片模板中编写if / else语句,因此我已将以下功能添加到我的产品模型中。

public function getNameAndQuantity()
{
    // Use the parent products name if this child product has no name
    if(empty($this->name))
    {
        $this->name = $this->parent->name;
    }

    // Append quantity if empty
    if($this->quantity > 1)
    {
        return $this->name . ' (Pack of ' . $this->quantity . ')';
    }

    return $this->name;
}

这可以按预期工作。 我的问题是:这个功能应该去哪里?它似乎不属于产品型号。

我已经阅读了一些关于为这种功能创建库的内容,但是我在命名约定方面有点丢失,或者是挂钩的最佳实践,因此代码保持可读性。或者这可能属于模板部分而不是......

谢谢!

1 个答案:

答案 0 :(得分:1)

由于您使用的是Laravel,我建议您在Controller中使用它。

但这取决于偏好,在我的情况下,我会创建一个Helper类,然后为它创建一个外观,最后通过服务提供商使用它。

为了实现这个正确的步骤将是:

  1. 在名为app/helpersfacades
  2. services中创建文件夹
  3. ClassLoader app/start/global.phpcomposer.json自动加载
  4. 中注册所有内容
  5. helpers中进一步创建一个包含所需功能的辅助类,然后根据information here创建一个外观
  6. 现在根据information hereapp/services创建服务提供商,并在app/config/app.php
  7. 中的服务提供商中注册

    运行并且您将拥有静态外观以轻松访问所有这些功能。