Re:

のあんのブログ

カテゴリ:開発 > CodeIgniter

ログレベルがデフォルトで
  • 0:Disables
  • 1:Error
  • 2:Debug
  • 3:Informational
  • 4:All
となっているのだが、log_thresholdへの設定値以下が全て出力されてしまうので、そのままだとDEBUGな嵐になる。

そんなわけで、シンプルにDebugとInformationalの設定値を入れ替えて設定値を2とする簡易対応。

/application/libraries/MY_Log.php
<?php

class MY_Log extends CI_Log {
    public  $_levels = array('ERROR' => '1', 'INFO' => '2',  'DEBUG' => '3', 'ALL' => '4');
}

マスクするレベルとしてこの順番の方が都合が良い。


Xdebug - Debugger and Profiler Tool for PHP
http://www.xdebug.org/index.php
# wget http://www.xdebug.org/files/xdebug-2.1.0.tgz
# tar zxf xdebug-2.1.0.tgz
# cd xdebug-2.1.0
# phpize
# ./configure
# make
# make install
php.iniにxdebug.soのextensionを追加してApache再起動でおk。

var_dump()による表示が整った。(前にもエントリしてたけど内容に方法書いてなかったので改めて)


CodeIgniterのメソッドチェーンが便利だと前に書いたけど、取得するカラム指定も必要だったので、ORMまではいかないけど定義しておくのがわかり易いので。

/libraries/MY_Model.php
public function setField($table_name, $fields){
    $_field= '_field_'.$table_name;
    $this->{$_field} = $fields;
}

/models/Cards.php
protected $_field_cards = 'id, collections_id, name, energy, max_energy, type, class, sort, status, created, updated';

public function getCard(){
        $this->db->select($this->_field_cards);
        $this->db->from('cards');
        $dbh = $this->db->get();
        $result = array();
        foreach($dbh->result_array() as $row)
            $result[] = $row;

        $this->num_rows = (int)$dbh->num_rows();

        return $result;
}

今のところテーブル結合には触れてないので、その場合にシンプルに書けるのかなーという不安はある。

結局 $this->db->query() を多用するハメにならないように考えます。




CodeIgniterのviewテンプレートに変数を渡すには、viewメソッドの第2引数にデータを指定する。

クラス変数やプロパティがviewに渡せるといいなーと思って改修した。

オブジェクトを除く仕様。

public function __set($name, $value) {
    $this->{$name} = $value;
}

protected function _v($templates) {
    $data = array();
    $vars = get_object_vars($this);
    if(!empty($vars))
        foreach($vars as $name => $value)
            if(!is_object($value)) $data[$name] = $value;

    $this->smarty->view($this->header, $data);
    if(is_array($templates))
        foreach($templates as $v)
            $this->smarty->view($v, $data);
    else
        $this->smarty->view($templates, $data);

    $this->smarty->view($this->footer, $data);

    return $this->output->get_output();
}

こんなんで。



どうしてもnull処理でクエリ一発処理させたいがために乱立するLEFT JOIN達。

まぁ適切であろう…インデックスが、今日を支えてマス。

MySQLに感謝しよう。



CodeIgniterのActive Recodeでメソッドチェーンの使い方あれこれ。(PHP5限定)

それなりに便利だと思うんだ。

たとえば、基底にユーザデータを取得するメソッドを作る

public function getUser(){
    $dbh = $this->db->get('user');
    $result = array();
    foreach($dbh->result_array() as $row)
        $result[] = $row;
    return $result;
}

ユーザIDからユーザデータを取得したい場合、whereメソッドで条件をセットしたあとにこのメソッドを呼ぶ

public function getUserById($id){
    $this->db->where('id', $id);
    return $this->getUser();
}

あとからページ分割に迫られてlimitしたい場合なんかも

public function getUserLimit($offset = 0, $limit = 10){
    $this->db->limit($limit, $offset);
    return $this->getUser();
}


好き嫌い別れるだろうけど、俺は好き。

シンプルに書けるから。


ところで、クラスメソッドや関数の引数に指定できる型がobject or array限定なのは、intもstringも適当に扱うPHPならではの仕様ってことなんですよね?

ま、俺のコーディングなんてPHP以上の適当っぷりだがな ( ゚д゚)、ペッ!


[PR] CodeIgniter、使いやすいよ。


$_POSTが渡ってこないと思ったら、<form>のactionにguid=onが付かないためにredirectしてた。

docomoの場合、htaccessでguid=onの強制付加&リダイレクトしてたの忘れてたぜ…。

テンプレに直書きすると大変そうなので、出力前の処理で置換&追加。

if($emoji->getCarrier() == 'docomo'){ // $emojiはHTML_Emojiオブジェクト
    $output = preg_replace(
        '/(<form.*action=")([^"]*)(.*">?)/', '$1$2?guid=on$3', $output);
//    output_add_rewrite_var('guid', 'on');
}

output_add_rewrite_varするのと、<a>タグをpreg_replaceするのって、やっぱり後者の方がまだマシなのかな。


いずれにしてもsite_url()、base_url()で付加する処理は追加してるので、url直書きしない限りは付加漏れすることはないと思う。

上記対応をしなくても、action記述にsite_urlで良かったっていうオチ。

対応してない場合のメモとして残しておこう、と。



テンプレエンジンにSmarty組み込んでるので、

<?=base_url()?>とか<?=site_url('regist/confirm')?>とは書かず、{base_url}{site_url url='regist/confirm'}でおk。

http://codeigniter.com/wiki/Use_URL_helper_from_Smarty/


それと、テンプレは.phpじゃなく.html化した。



↑このページのトップヘ