我的AppController中有一个实用工具方法,我需要在Cell(后端)中使用该方法。
是否有标准方法在两个地方使用相同的方法?我不想重复代码。
我不认为Cell和控制器之间共享功能的标准惯例,它可能是关注点分离不良的标志(但不一定!)。我通常首先要确保这个函数实际上是一个“实用程序”,而不是更好地通过其他方式实现...
总而言之,可能有几种方法可以做共享功能:
Cake本身将它的实用程序类放在src/Utility
中,例如Hash class。它没有明确地在您自己的Utilities的文档中自己列出使用这个目录结构,但是我认为如果他们这样做的话就是他们建议的地方。
将方法粘贴在Utility静态类中:
namespace App\Utility;
class Gravitar {
public static function getUrl($username){
// the function
}
}
然后在每个位置使用该命名空间引用它,例如在Controller中:
namespace App\Controller;
use App\Utility\Gravitar;
class PeopleController {
public function view(){
// Normal view etc.
// Call by
Gravitar::getUrl($username );
}
}
将功能粘贴在特征中。如果你不能使函数静态,我只会这样做(如果你不能,它可能是一个坏迹象,它可能不是一个真正的“实用程序”)。
没有传统的地方可以放置共享特征。您可以将它放在src/Controller/Traits
中的其他Controller Traits中,从Cell中引用它:
namespace App\View\Cell;
use App\Controller\Traits\GravitarTrait;
class PeopleCell {
use GravitarTrait;
public function display(){
// Normal cell display function.
// Call by direct reference
$this->getUrl($username);
}
}