任何人都可以提供一些在PHP / CakePHP中编写可重用代码的技巧吗?
答案 0 :(得分:6)
[如何]在AppController中编写单个[delete]函数
好的,我会咬人的。您几乎完全按照在单个控制器中编码的方式对其进行编码,您只需要用变量替换变化的部分。
class AppController extends Controller {
var $components = array('Session');
function delete($id) {
$model = $this->modelClass; // holds the primary model name
if (!$this->$model->delete($id)) {
$this->Session->setFlash("Couldn't delete $model record $id.");
}
$this->redirect($this->referer());
}
}
通读Cake的源代码,了解哪些变量可供您使用。阅读更多源代码,特别是组件和行为,根据定义,可以重复使用,以了解更具体的技术。
答案 1 :(得分:3)
好吧,我认为没有人提到过组件......这就是CakePHP中可重复使用的东西应该放在哪里,至少在我看来,正如我所看到的,控制器是独一无二的,模型也是如此,组件是您可以重复使用的代码由控制器调用的地方。
这真的取决于你想要做什么,如果你只是在一个类中重用代码(在那个类之外它没有任何真正的实用程序),那么就不要打扰组件,只需在类中使用一个函数..但是,当你发现自己使用的函数在多个控制器中大致相同时,则将它放入一个类中。
IMO最好的事情就是总是尝试在创建它们时将类分解为逻辑函数,然后再担心稍后在类中的函数中创建组件,这意味着如果您不确定如果你要重复使用某些东西,不要花费额外的时间将其作为一个组件,因为这可以在以后轻松完成(但只需要做更多的工作/思考它)......
如果你提前知道你将重用一个函数,那么就把它放到一个组件中开始。
(Cakephp中另一件很棒的事情就是在模型,控制器,组件的文件夹中......你可以创建自己的文件夹并将文件放入其中,而不受cakephp关心它们的位置,只要它们在整体正确的目录(即控制器,如果它是一个控制器)所以,如果你有一堆控制器,比如做一个你认为是“更新用户配置文件信息”的动作,那么你只需为此创建一个文件夹并放入所有那些在那里你可以对与此相关的组件(在组件目录中)做同样的事情...但是当你在这个文件夹中调用一个控制器时,你不必在调用url中引用该文件夹。我发现非常方便的东西,因为它可以节省大量繁琐的工作,同时允许你保持课堂文件非常有条理)
答案 2 :(得分:2)
在app_controller.php中创建方法并在其他控制器中使用它。
// app/app_controller.php
public function _foo($params){
// do something
}
// app/controllers/some_controller.php
public function foo($params){
$this->_foo($params);
// do something else
}
// app/controllers/other_controller.php
public function foo($params){
$this->_foo($params);
}
答案 3 :(得分:0)
不要忘记全能的插件。我意识到这与主要问题中的评论略有不同。但是cakephp中代码可重用性的最终形式是一个插件。