热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

cakephp组件中访问控制器的实例

如果要在组件中访问控制器的实例(instance),需要实现组件的initialize()或者startup()方法。这两个特殊的方法接收一个到控制器的引用作为第一个参数并且被自动调用。initialize()方法在控制器的beforeFilter()方法执行前被自动调用

如果要在组件中访问控制器的实例(instance),需要实现组件的initialize()或者startup()方法。这两个特殊的方法接收一个到控制器的引用作为第一个参数并且被自动调用。initialize()方法在控制器的beforeFilter()方法执行前被自动调用,startup()方法在beforeFilter方法执行后被自动调用。如果出于某些原因你不想startup()方法在控制器执行构筑操作的时候被调用,那么可以设置类成员变量$disableStartuptrue

如果你想在控制器的beforeFilter()之前干点什么的话,initialize()方法是最合适的选择。

cOntroller=& $controller;
	}

	//在Controller::beforeFilter()之后被调用
	function startup(&$controller) {
	}

	function redirectSomewhere($value) {
		// 使用控制器的方法
		$this->controller->redirect($value);
	}
}
?>
  1. class CheckComponent extends Object {
  2. //在Controller::beforeFilter()之前被调用
  3. function initialize(&$controller) {
  4. // saving the controller reference for later use
  5. $this->controller =& $controller;
  6. }
  7. //在Controller::beforeFilter()之后被调用
  8. function startup(&$controller) {
  9. }
  10. function redirectSomewhere($value) {
  11. // 使用控制器的方法
  12. $this->controller->redirect($value);
  13. }
  14. }
  15. ?>

有时候你也许会需要在组件中使用其他的组件,你只需要在组件中声明类成员变量$components(就像在控制器中一样),他的值是一个你想使用的组件名的数组。

Math->doComplexOperation(1, 2);
		$this->Session->write('stuff', $result);
	}

}
?>
  1. class MyComponent extends Object {
  2. // 需要使用的其他组件
  3. var $components = array('Session', 'Math');
  4. function doStuff() {
  5. $result = $this->Math->doComplexOperation(1, 2);
  6. $this->Session->write('stuff', $result);
  7. }
  8. }
  9. ?>

在组件中使用或者访问模型(model)并不是很推荐;不过这种可能性也不是没有,在这种情况下,你需要手动的生成模型的实例进行使用。下面是一个例子:

find('count');
		return ($amount1 + $amount2) / $totalUsers;
	}
}
?>
  1. class MathComponent extends Object {
  2. function doComplexOperation($amount1, $amount2) {
  3. return $amount1 + $amount2;
  4. }
  5. function doUberComplexOperation ($amount1, $amount2) {
  6. $userInstance = ClassRegistry::init('User');
  7. $totalUsers = $userInstance->find('count');
  8. return ($amount1 + $amount2) / $totalUsers;
  9. }
  10. }
  11. ?>
See comments for this section

3.6.3.3 Using other Components in your Component

  • Translate
  • View just this section
  • Comments (0)
  • History

There is no translation yet for this section. Please help out and translate this.. More information about translations

Sometimes one of your components may need to use another.

You can include other components in your component the exact same way you include them in controllers: Use the$componentsvar.

Existing->foo();
    }

    function bar() {
        // ...
    }
}
?>
  1. class CustomComponent extends Object {
  2. var $name = "Custom"; // the name of your component
  3. var $components = array( "Existing" ); // the other component your component uses
  4. function initialize(&$controller) {
  5. $this->Existing->foo();
  6. }
  7. function bar() {
  8. // ...
  9. }
  10. }
  11. ?>
Parent->bar();
    }

    function foo() {
        // ...
    }
}
?>
  1. class ExistingComponent extends Object {
  2. var $name = "Existing";
  3. function initialize(&$controller) {
  4. $this->Parent->bar();
  5. }
  6. function foo() {
  7. // ...
  8. }
  9. }

推荐阅读
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • Android Studio 安装与配置指南
    本教程详细介绍了如何下载并安装 Android Studio,包括设置 SDK 路径和优化启动性能的方法。通过这些步骤,您可以顺利地开始开发 Android 应用。 ... [详细]
  • 本文详细介绍了福昕软件公司开发的Foxit PDF SDK ActiveX控件(版本5.20),并提供了关于其在64位Windows 7系统和Visual Studio 2013环境下的使用方法。该控件文件名为FoxitPDFSDKActiveX520_Std_x64.ocx,适用于集成PDF功能到应用程序中。 ... [详细]
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 本文详细介绍了如何在PHP中实现基于概率的随机抽奖功能。通过实例代码,解释了抽奖逻辑、奖品设置及结果统计的方法。适合PHP开发者参考学习。 ... [详细]
  • 本文对宋代词人朱雍的《迷神引》进行翻译和赏析,深入探讨其词作的艺术特色与情感表达。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 本文介绍如何使用PHP在WordPress中根据分类类别ID或名称获取所有相关文章,提供详细的方法和代码示例。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文详细介绍了如何使用 PHP 接收并处理微信支付的回调结果,确保支付通知能够被正确接收和响应。 ... [详细]
  • 小编给大家分享一下如何移除URL中的index.php,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收 ... [详细]
author-avatar
gunnerliang_851
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有