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;
        }
    }

私の質問は、「カスタム」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 に答える