长话短说:我正在将Facebook API(PHP-SDK)与CakePHP集成(我知道GitHub上已经存在集成,但我将此练习用作CakePHP和MVC的学习曲线) 。我的问题如下:
我有一个控制器动作,以非常简单的格式返回朋友列表:
$data = array(
'friends' => $this->_facebook->api('/me/friends')
);
$this->set($data);
$data
然后被发送到相应的视图,此时我只是简单地调用print_r($friends);
,这就像一个魅力。但是,我想订购好友数组,无论是升序还是降序,在MVC世界之前,我都在使用这个函数:
public function listFriends($sort = "") {
$sort = strtolower($sort);
$friend_array = $this->_facebook->api('/me/friends');
$friends = array();
switch ($sort) {
case "asc":
foreach($friend_array['data'] as $friend) {
$friends[$friend['id']] = $friend['name'];
}
natcasesort($friends);
return $friends;
break;
case "desc":
foreach($friend_array['data'] as $friend) {
$friends[$friend['id']] = $friend['name'];
}
arsort($friends);
return $friends;
break;
default:
foreach($friend_array['data'] as $friend) {
$friends[$friend['id']] = $friend['name'];
}
return $friends;
}
}
我的问题是:如何在CakePHP中实现相同的目标,我可以在哪里放置“自定义”listFriends()
功能?我的理解是,如果我将其放入控制器,那么有人可以通过调用 http://example.com/controller/listFriends 来访问它,我显然希望避免这种情况。我还假设 .ctp 文件不是放置此代码的最佳位置,那么在哪里?
答案 0 :(得分:1)
组件就是答案!
如果有人遇到同样的“问题”:
<?php
App::uses('Component', 'Controller');
class SortComponent extends Component {
public function listFriends() {
//blablablabla
}
}
?>
在您的控制器中添加以下内容:
public $components = array('Sort');
您可以通过调用
来访问您的方法$this->Sort->listFriends()
干杯!