热门标签 | 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. }

推荐阅读
  • 本文详细介绍了暂估入库的会计分录处理方法,包括账务处理的具体步骤和注意事项。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 郑州大学在211高校中的地位与排名解析
    本文将详细解读郑州大学作为一所位于河南省的211和双一流B类高校,在全国211高校中的地位与排名,帮助高三学生更好地了解这所知名学府的实力与发展前景。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 优化ASM字节码操作:简化类转换与移除冗余指令
    本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 电子元件封装库:三极管、MOS管及部分LDO(含3D模型)
    本资源汇集了常用的插件和贴片三极管、MOS管以及部分LDO的封装,涵盖TO和SOT系列。所有封装均配有高质量的3D模型,共计96种,满足日常设计需求。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 小红书提高MCN机构入驻门槛,需缴纳20万元保证金
    近期,小红书对MCN机构的入驻要求进行了调整,明确要求MCN机构在入驻时需缴纳20万元人民币的保证金。此举旨在进一步规范平台内容生态,确保社区的真实性和用户体验。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 动物餐厅高效获取小鱼干攻略
    本文将介绍2023年动物餐厅中快速赚取小鱼干的有效方法,帮助玩家更轻松地积累资源。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
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社区 版权所有