CakePHP - 自己的功能

时间:2013-04-17 15:12:17

标签: php facebook-graph-api cakephp-2.0

长话短说:我正在将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 文件不是放置此代码的最佳位置,那么在哪里?

1 个答案:

答案 0 :(得分:1)

组件就是答案!

如果有人遇到同样的“问题”:

<?php
App::uses('Component', 'Controller');
class SortComponent extends Component {
    public function listFriends() {
        //blablablabla
    }
}
?>

在您的控制器中添加以下内容:

public $components = array('Sort');

您可以通过调用

来访问您的方法
$this->Sort->listFriends()

干杯!