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文件不是放置此代码的最佳位置,那么在哪里呢?

4

1 回答 1

1

组件就是答案!

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

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

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

public $components = array('Sort');

您可以通过调用访问您的方法

$this->Sort->listFriends()

干杯!

于 2013-04-17T15:29:20.600 回答