cakePHP从ctp文件调用控制器函数
如何在视图(.ctp文件)中调用此函数 实际函数在cakePHP从ctp文件调用控制器函数,php,cakephp,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
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);
}
将函数移动到bootstrap.php,您可以从任何地方运行它。将函数移动到bootstrap.php,您可以从任何地方运行它。如其他人所述,您应该从控制器操作调用另一个控制器方法:
class UsersController extends AppController {
public function paymentresp() {
// do stuff
$this->_verbose_log($logMessage);
// do more stuff
}
protected function _verbose_log($message) {
// log stuff
}
}
(通过在方法名称前加下划线[受保护方法的约定],用户将无法通过访问将其作为控制器操作运行)
此外,所有CakePHP对象都继承一个内部调用的。您可以使用此现有功能,而不是自己实现它:
class UsersController extends AppController {
public function paymentresp() {
// do stuff
$this->log($logMessage, 'error');
// or
CakeLog::write('error', $logMessage);
// do more stuff
}
}
如其他人所述,您应该从控制器操作调用另一个控制器方法:
class UsersController extends AppController {
public function paymentresp() {
// do stuff
$this->_verbose_log($logMessage);
// do more stuff
}
protected function _verbose_log($message) {
// log stuff
}
}
(通过在方法名称前加下划线[受保护方法的约定],用户将无法通过访问将其作为控制器操作运行)
此外,所有CakePHP对象都继承一个内部调用的。您可以使用此现有功能,而不是自己实现它:
class UsersController extends AppController {
public function paymentresp() {
// do stuff
$this->log($logMessage, 'error');
// or
CakeLog::write('error', $logMessage);
// do more stuff
}
}
使用requestAction,您可以在视图页面中调用控制器方法 e、 g
使用requestAction,您可以在视图页面中调用控制器方法 e、 g
您不在视图中调用函数,而是在控制器中调用它并将结果传递给视图。你能举一个例子说明你在做什么吗?如果你想从视图中调用一个函数,它需要在bootstrap.php中。但你会失去任何类型的对象功能。在控制器中,我编写了日志函数,我正在进行支付过程,当支付过程成功时,我将页面重定向到.com/paymentresp,我调用了paymentresp,在这里我想调用日志函数。你应该详细说明问题或发布一些代码。我敢打赌,您之所以想这样做,是因为您认为这是完成不应该通过从视图调用控制器函数来完成的事情的唯一方法。当您尝试这样做时,很可能会进入重定向循环。您不在视图中调用函数,而是在控制器中调用它,并将结果传递给视图。你能举一个例子说明你在做什么吗?如果你想从视图中调用一个函数,它需要在bootstrap.php中。但你会失去任何类型的对象功能。在控制器中,我编写了日志函数,我正在进行支付过程,当支付过程成功时,我将页面重定向到.com/paymentresp,我调用了paymentresp,在这里我想调用日志函数。你应该详细说明问题或发布一些代码。我敢打赌,您之所以想这样做,是因为您认为这是完成不应该通过从视图调用控制器函数来完成的事情的唯一方法。在尝试这样做时,您很可能会陷入重定向循环。这在技术上是正确的,但大多数时候bootstrap.php是最不适合放置函数的地方,因为它打破了MVC模式。这在技术上是正确的,但是大多数时候bootstrap.php是最不适合放置函数的地方,因为它打破了MVC模式。但在这种情况下不是这样。在上面的用例中这样做是完全错误的。没有什么能阻止糟糕的设计。这个方法应该在一个lib类中,或者在一些静态方法类中。PS:另外,如果你需要在99%的情况下使用requestAction,那么它的设计也很糟糕。是的,我同意你的观点。这是一个糟糕的设计,但这是唯一方便的技术,而且它提供了Cakephp。在上面的用例中这样做是完全错误的。没有什么能阻止糟糕的设计。这个方法应该在一个lib类中,或者在一些静态方法类中。PS:另外,如果你需要在99%的情况下使用requestAction,那么它的设计也很糟糕。是的,我同意你的观点。这是一个糟糕的设计,但这是唯一方便的技术,而且它还提供了Cakephp。