代码之家  ›  专栏  ›  技术社区  ›  Jeremy Kauffman

“全局”Symfony函数应该放在哪里?

  •  8
  • Jeremy Kauffman  · 技术社区  · 16 年前

    我最近不得不编写一些在视图和模型中都使用的统计函数。如果我把它们放在helper中,我就会在模型层中加载helper,这很烦人,看起来不正确,并且在从任务调用这些函数时完全中断(因为没有默认上下文)。如果我把它们放在顶层 lib Stats::normalPercentile 在视野中。

    还有其他选择吗?Symfony devs对这些函数应该放在哪里有何评论?

    编辑 significant discussion )在这种情况下,放置这样的文件有什么约定吗?把它们扔进去 lib/util ?

    3 回复  |  直到 16 年前
        1
  •  7
  •   Raise    16 年前

    关于您的编辑,symfony的helpers是这样写的,以避免将视图中的语法弄乱,这对于那些通常接触一点PHP的技术不太熟练的人来说可能是不熟悉的——函数是“香草”PHP中的一流公民。这是从rubyonrails中汲取的一种哲学,它启发了框架的这一部分。

    将文件存储在 lib/ 是一种个人喜好,symfony并不介意,但命名法会建议 lib/vendor/yourname .

    yourname 真正地 好代码,你可能想 package it and share it with others :)

        2
  •  1
  •   Jakub Zalas    16 年前

    在一个视图中收集数据是很奇怪的。你为什么不在一个动作中做呢?

    可能正确的答案取决于你试图解决的问题类型(你没有解释你的助手应该做什么)。我通常将这些帮助程序用于不需要任何额外类或调用(如“stripText”)的常见任务。

        3
  •  0
  •   lunohodov    16 年前

    lib/util lib/model PercentileSequence 可以在您的视图和任务中重用这些数据:

    // in your action, component or task
    $this->mySequence = new PercentileSequence($data);
    
    // in your view (if PercentileSequence implements Iterator)
    <?php foreach ( $mySequence as $rank ): ?>
        <?php echo $rank ?>
    <?php endforeach; ?>
    // or use plain old array   
    <?php foreach ( $mySequence->getRanks() as $rank ): ?>
        <?php echo $rank ?>
    <?php endforeach; ?>
    

    在一个任务中应该是相同的。