【问题标题】:Cakephp load Appcontroller method in componentCakephp 在组件中加载 Appcontroller 方法
【发布时间】:2017-07-12 13:56:00
【问题描述】:

我想在组件中加载 Appcontroller 方法。

这是我的应用控制器

public function date_conversion($date = "11/06/13") {
    $date_format = 'm/d/y';
    $input_date = explode('/', $date);
    return date('Y-m-d', strtotime($input_date[0] . '/' . $input_date[1] . '/' . $input_date[2]));
}

这是我的组件

public function getWeeklyData($start_date)
{
 //AppController::date_conversion($start_date); // Not working
 $appController = ClassRegistry::init('AppController'); 
 $start_date = $appController->date_conversion($start_date);
 echo $start_date;
 exit;
 --------
 ---------
 --------
 --------
 return $final_data;
}

我试过这个 AppController::methodName()

没有用

谢谢

【问题讨论】:

  • 我认为 CakePHP 组件的想法是在一个地方实现跨多个控制器使用的功能(以保持代码干燥)。在我看来,最好在一个地方实现该功能以使其更方便重用,例如一个组件/助手/库甚至模型。

标签: cakephp cakephp-2.3


【解决方案1】:

这是完全错误的:

  • 在控制器而不是助手中输出格式化代码(TimeHelper::format() 不起作用?)并查看
  • 在组件中使用 AppController 中的方法,哎呀,真的很痛,它基本上颠倒了组件的想法。
  • 组件中的业务逻辑而不是模型层 (getWeeklyData())
  • 您没有遵循任何编码标准约定
  • 组件方法中甚至还有标记...您挫败了将表示与业务逻辑分离的想法

你真的绝对不知道你在做什么设计模式或 CakePHP 是如何工作的。如果您没有以任何方式正确使用它,为什么还要使用框架。代码告诉我,你真的不知道为什么会有不同的东西,比如控制器、模型或组件,以及它们是什么。

我建议您在尝试实现应用程序之前重新开始并学习MVC 框架和设计模式的基础知识。如果整个应用程序代码看起来像您粘贴的代码,那么它在一天结束时只是无法维护的意大利面条代码。从这里开始阅读https://book.cakephp.org/2.0/en/getting-started.html 并完成博客教程。这段代码和你对它的理解有很多错误,在这里完整地解释所有这些内容太详尽了。

【讨论】:

    【解决方案2】:

    如果你有这样的 AppController 类:-

    class AppController extends Controller {
    
        public function callApp(){
            return "This is App Controller and a non-static method";
        }
    
        public static function staticApp(){
            return "This is a static method";
        }
    }
    

    然后你可以像这样在 Component 中调用它:-

    <?php
    App::uses('Component', 'Controller');
    class FooComponent extends Component{
        public function Foo(){
            // For non static method
            $appController = ClassRegistry::init('AppController');  // Get 
    reference of AppController
            echo $appController->callApp();
    
            echo "<br>";
            // For static method
            echo AppController::staticApp();
        }
    }
    

    【讨论】:

    • 感谢您的回复,它不起作用说致命错误致命错误:在非对象上调用成员函数 read()
    • 如果你编辑你的问题并分享你的代码会更好。 @SuneelKumar
    • 这段代码在很多方面都非常错误......我在回答中列出了其中的一些。
    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多