Model view controller CakePHP2.0.4:在控制器中使用“数字”辅助程序

Model view controller CakePHP2.0.4:在控制器中使用“数字”辅助程序,model-view-controller,cakephp,cakephp-2.0,Model View Controller,Cakephp,Cakephp 2.0,我知道在控制器中使用helpers是违反MVC方法的,但在某些情况下它是有用的。例如,考虑我的CAKEPHP1.3.13项目中的一个控制器代码片段,它处理图像上传: elseif ($_FILES['data']['error']['ModelName']['field_name'] === UPLOAD_ERR_INI_SIZE) { App::import('Helper', 'Number'); $Number = new NumberHelper(); $thi

我知道在控制器中使用helpers是违反MVC方法的,但在某些情况下它是有用的。例如,考虑我的CAKEPHP1.3.13项目中的一个控制器代码片段,它处理图像上传:

elseif ($_FILES['data']['error']['ModelName']['field_name'] === UPLOAD_ERR_INI_SIZE) {
    App::import('Helper', 'Number');
    $Number = new NumberHelper();

    $this->Session->setFlash("The image you uploaded was not saved because it appeared to be larger than {$Number->toReadableSize($max_filesize_in_bytes)}.");
}
我现在正在从事一个CakePHP2.0.4项目,我使用了相同的代码,只是我替换了App::import'Helper'、'Number';使用App::使用'NumberHelper','View/Helper';我收到了这个错误信息:

Warning (4096): Argument 1 passed to Helper::__construct() must be an instance of View, none given, called in /Path/To/My/Website/app/Controller/MyController.php

有什么想法吗?

你不应该在控制器中使用助手。我很久以前就建议应该有图书馆课程来做这个。希望这将集成到2.1中

在那之前,你应该使用

$Number = new NumberHelper(new View(null));

我知道已经很晚了,但蛋糕核心团队已经在核心库中嵌入了CakeNumber类。从现在起,我们应该在控制器/模型中直接使用下面的函数,而不是创建一个helper对象

有关更有用的函数列表,请参阅类。要查看核心库的完整列表,请访问


我希望它能帮助一些人

真管用!非常感谢。我知道,在控制器中使用它会让我感觉脏兮兮的,但我不知道还能做什么。我知道-我已经构建了必要的类:。核心团队似乎不愿意最终使cakephp完全兼容MVC。它们现在是实用函数,可以从应用程序中的任何地方静态访问。是的,我看到了,并且很高兴。但是,并不是所有文本助手的方法都被移动到String类中,例如autoLink*方法。这太糟糕了,因为我可以看到这些方法在视图层之外使用。例如,有些人不喜欢将HTML存储在数据库中,因此他们可能希望在将其保存到数据库之前,在注释字段上运行autoLink*方法之一。也许有一天这些方法会被改变。不管怎样,谢谢你为那些有朝一日可能会遇到这种情况的人发表评论!确切地仅验证,无筛选/消毒/转义/自动链接。这就是我过去三年来一直在宣扬的。
CakeNumber::currency(mixed $number, string $currency = 'USD', array $options = array())
CakeNumber::defaultCurrency(string $currency)