3

私はそれがインデックスアクションでapp/controllers/UsersController.php簡単にできるようにしました。Users::find('all');

パス/users/indexは、ユーザー データのプレーンな 'ol HTML 出力をレンダリングします。このパス/users/index.jsonは、HTML 出力に相当する JSON をレンダリングします。これは、パスワード (ハッシュされていますが、それでも...) も公開するという事実を除けば、優れています。

これを回避するには、次の 2 つのオプションがあります。

  1. fieldsファインダーで明示的に指定します。
  2. Media::render()機密データをフィルタリングして設定解除します。

長期的には、#2の方が維持しやすいと思います。ご意見はありますか?3 番目のより良い代替手段はありますか?

これは私が#2を実装した方法です:

<?php

namespace app\controllers;

use \lithium\net\http\Media;

class UsersController extends \lithium\action\Controller {
    protected function _init() {
        Media::applyFilter('render', function($self, $params, $chain) {
            if ($params['options']['type'] === 'json') {
                foreach ($params['data']['users'] as $user) {
                    $user->set([
                        'password' => null,
                        'salt' => null
                    ]);
                }
            }
            return $chain->next($self, $params, $chain);
        });
        parent::_init();
    }
}
?>

アドバイスをいただければ幸いです。

4

4 に答える 4