‘PHP’ タグのついている投稿

SymfonyのAdmin generatorでリストにフィルタを表示させない方法

Admin generatorを使っていて、リスト表示をするときにフィルタが不要な場合があります。例えば行が少ないとか、すでに決まったフィルタが別にある場合など。フィルタのフォーム自体を消したい場合は以下の方法で。

apps/backend/modules/MODULE_NAME/templates/

_filters.php
を空で作成すればいいだけです。

admin generatorでの開発とはキャッシュを読む作業と見つけたり…

追記

コメントで教えていただいた方法で、もっと簡単に実現できました。filterのclassをfalseにするだけでOKです。

generator:
  class: sfDoctrineGenerator
  param:
    config:
      filter:
        class: false


複数の入力欄にまたがるValidationのエラーを特定の入力欄に表示させたい場合

sfFormでSymfony 1.4のお話。

PostValidatorのエラーメッセージをどこに出せばいいんだ?という状況で使用できます。

class SomethingInputForm extends BaseForm
{
    public function configure()
    {
        // ...
        $this->validatorSchema->setPostValidator(
            new sfValidatorCallback(array('callback' => array($this, 'myCallbackFunc')))
        );
    }

    public function myCallbackFunc($validator, $values) {
        // 何かバリデーション
        if (!($values['input1'] == $values['input2'] == $values['input3'])) {
            $error = new sfValidatorError($validator, 'error message ...');
            throw new sfValidatorErrorSchema($validator, array('input1' => $error)); 
        }
        
        return $values;
    }
}

こんな感じで、input1のエラーとして出力できるので、テンプレートのエラー表示が楽になります。


リバースProxy環境でのmixiアプリのOAuth

CakePHPでmixiアプリのOAuthを処理させる方法は以下のサイト参照。ホントにシンプルでわかりやすい解説。

[cakephp] mixiアプリのOAuthのリクエストを受け取る – 「のーぶるじゃすぱー」略して「のぶじゃす」のBLOG

通常の環境ではこのまま実装すればOK。

で、このあとロードバランサーの入ったサーバに持ってきたらOAuthが正しく認証されない。

OAuthRequestのhttp_urlを見てみると、

http://192.168.0.2:8001:80//api/hoge/hoge/…

という悲しいことになっていて、これがどうも問題のようだと。というか、ホスト:ポート:ポートってどういうことだ…

本来ならもちろん、

http://mixiapp.sample.com:80/api/hoge/hoge/…

みたいなアドレスになっていないといけない。

ちなみに送信側はmixiアプリのサンプルそのまんまな感じのJavaScript

var params = {};
params[gadgets.io.RequestParameters.REFRESH_INTERVAL] = 0;
params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;
var url = "http://mixiapp.sample.com/api/hoge/hoge/";
gadgets.io.makeRequest(url, func, params);

解決策は

function validateOAuth () {

    $get = $_GET;
    unset($get['url']);
    $http_url = 'http://mixiapp.sample.com:80/' . ltrim($_SERVER['REQUEST_URI'],'/');
    $request = OAuthRequest::from_request(null, $http_url, array_merge($get, $_POST));
    if ($_GET['oauth_consumer_key'] == 'mixi.jp') {
        @$signature_valid = $this->MixiAppliOauth->check_signature($request, null, null, $get["oauth_signature"]);
    }

    if ($signature_valid == true || Configure::read('debug')) {

        $this->oauth_valid = true;
        $this->viewer_id   = $get['opensocial_viewer_id'];
        $this->owner_id    = $get['opensocial_owner_id'];

        return $get;

    }

    return false;

}

というように、from_requestの第二引数にURLを指定してやればOK。なぜかスラッシュが2つ付いていたので削って付けなおしてます。