cakePHP从ctp文件中调用控制器函数

时间:2011-12-02 16:32:15

标签: php cakephp

如何在视图(.ctp文件)中调用此函数

实际功能在UserController

中定义
 function verbose_log($msg) {
    date_default_timezone_set('Asia/Calcutta');
    $today = date("Ymd");
    $timestamp = time();
    $filename = "errorlog";
    if (!file_exists($filename)) { 
        echo "The file $filename exists";
        $ourFileHandle = touch($filename) or die("can't open file");    
    } 
    $fd = fopen($filename, "a");
    $str = "${today}|${timestamp}|${msg}";
    fwrite($fd, $str . PHP_EOL);
    $timestamp ='';
    fclose($fd); 
}

3 个答案:

答案 0 :(得分:1)

正如其他人所说,您应该从控制器操作中调用另一个控制器方法:

class UsersController extends AppController {

    public function paymentresp() {
        // do stuff
        $this->_verbose_log($logMessage);
        // do more stuff
    }

    protected function _verbose_log($message) {
        // log stuff
    }
}

(通过在方法名前加上下划线[受保护方法的约定],人们将无法通过访问http://example.com/controller/verbose_log将其作为控制器操作运行)

此外,所有CakePHP对象都继承了log method,在内部调用CakeLog。您可以使用此现有功能,而不是自己实现它:

class UsersController extends AppController {

    public function paymentresp() {
        // do stuff
        $this->log($logMessage, 'error');
        // or
        CakeLog::write('error', $logMessage);
        // do more stuff
    }
}

答案 1 :(得分:0)

将您的函数移动到bootstrap.php,您可以从任何地方运行它。

答案 2 :(得分:0)

使用requestAction,您可以将控制器方法调用到您的视图页面。

e.g。

$this->requestAction('/ControllerName/MethodName/');