我有一个裁剪工具组件和帮助器,可以在cake 2.x上运行,但现在我需要将这个裁剪工具用于cakephp 1.3中的一个旧项目。我该怎么做?
组件:
<?php
App::uses('Component', 'Controller');
class JcropComponent extends Component {
public $components = array('Session');
public $options = array(
'overwriteFile' => true,
'boxWidth' => '940'
);
/**
* Constructor
*/
public function __construct(ComponentCollection $collection, $options = array()) {
parent::__construct($collection,$options);
$this->options = array_merge($this->options, $options);
}
?>
帮助者
<?php
App::uses('AppHelper', 'View/Helper');
class JcropHelper extends AppHelper {
public $helpers = array('Html','Form','Js');
public $options = array(
'tooltip' => true,
'boxWidth' => '940'
);
public function __construct(View $view, $options = null) {
parent::__construct($view,$options);
$this->options = array_merge($this->options, $options);
}
?>
我尝试将其更改为此,它可以显示图像,但如何合并选项数组? __construct($ options = array())
的那个<?php
class JcropComponent extends Component {
var $components = array('Session');
public $options = array(
'overwriteFile' => true,
'boxWidth' => '940'
);
//public function initialize(&$controller, $settings = array()) {
// $this->controller =& $controller;
//parent::__construct($collection,$options);
//$this->options = array_merge($this->options, $options);
//}
?>
<?php
class JcropHelper extends AppHelper {
var $helpers = array('Html','Form','Js');
public $options = array(
'tooltip' => true,
'boxWidth' => '940'
);
public function __construct($settings = null) {
//parent::__construct($view,$options);
//$this->options = array_merge($this->options, $options);
}
?>
答案 0 :(得分:2)
您遇到的第一个重要问题是:组件接收设置的方式在主要版本之间发生了变化。
//Component(Collection) Class
$component->initialize($controller, $settings);
//ComponentCollection class
new $componentClass(ComponentCollectionObject, $settings);
因此,在1.3中使组件以相同的方式工作的方法是定义初始化方法。
对帮助者进行了类似的更改:
//View class
new $helperCn($options);
//HelperCollection class
new $helperClass(ViewObject, $settings);
在这种情况下,它应该更加明显 - 任何重写的方法都应该与父类具有相同的方法签名。因此:更改帮助程序以在构造函数中具有相同的预期参数
在1.3中,组件不扩展Component,它们扩展了Object。组件是在1.3中充当集合的类,扩展它将导致意外和不期望的行为(即,它可能会导致意外的“随机”警告和致命错误)。因此,您应该将组件类更改为与所有其他组件类似,扩展Object(或非常简单 - 不扩展组件)。
如果这个类是你在各种项目中使用和维护的东西,那么最好将主要功能提取到一个独立的类中,并且只实现一个瘦的包装类(组件/行为)来与它进行交互。通过这种方式,可以利用对主要功能所做的任何更改,而不管使用的蛋糕版本或任何其他框架。