トップページphp
983コメント301KB

[PHP][フレームワーク]CodeIgniterスレ

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/04/27(金) 23:17:16ID:???
公式:http://www.codeigniter.com/
チュートリアル:http://codeigniter.com/tutorials/

ユーザガイド日本語訳:http://ci-user-guide-ja.nought-point-999.net/

小回りの利くフレームワークの話題をひとつ!
0341nobodyさん2008/05/08(木) 14:27:09ID:???
>>339-340
この流れは読めた。
0342nobodyさん2008/05/08(木) 14:32:56ID:???
>>340
おお!

ちいちゃんとぷろぐらまーwwwwww(ノ∀`)
0343nobodyさん2008/05/09(金) 20:18:30ID:???
みなさんCIで何つくってるの?会社案内?
0344nobodyさん2008/05/09(金) 20:40:43ID:???
>>343
ショッピングカートとかCMSとか。
あちこち独自ライブラリで拡張しまくりだけど。

CIは独自フレームワークを作るためのフレームワークという感じ。
0345nobodyさん2008/05/09(金) 21:46:00ID:???
>>344
同じく。
自前でフロントコントローラ作るのが面倒だからプロジェクト毎に特化したCIライブラリ拡張してる。
って使い方するならCIは便利だと思う。

他の人はどうなの?
0346nobodyさん2008/05/11(日) 07:16:47ID:???
>>345

同じく。つか、これこそFWだと思う。

今後は他のFWから依存しないライブラリを
パクって統合してみる予定。キメラ的な感じ。
0347nobodyさん2008/05/11(日) 09:16:30ID:???
aso
0348nobodyさん2008/05/11(日) 10:11:44ID:???
ばかだなぁw

フレームワーク意味ないじゃないかw
0349nobodyさん2008/05/11(日) 11:56:34ID:???
>>348
じゃあ、フレームワークの意味をなくさない程度の
使い方ってものを講釈願おうか
0350nobodyさん2008/05/11(日) 12:14:16ID:???
汎用的な部分は誰が作っても同じような構成になる。
独自のライブラリはなるべく使わない。
0351nobodyさん2008/05/11(日) 12:27:53ID:???
>>350
すまん、ちょっとわからんかった。

独自ライブラリを組み込んだものを
チーム全員が同じく使うという前提だったのだが、
350はCIをそのまま使えと言っている?
0352nobodyさん2008/05/12(月) 00:45:07ID:8tRiGXCa
ポストされた文字を内部エンコードに変換する処理どこに書く?
0353nobodyさん2008/05/12(月) 00:47:19ID:???
まだ、EUCやSJISなんか使っているのか?
HTMLも内部もUTF-8にきまってるだろ。
0354nobodyさん2008/05/12(月) 01:08:57ID:???
だって携帯なんだもん
0355nobodyさん2008/05/12(月) 14:58:24ID:???
$this->load->config
とかプロパティーでメソッドチェーンするのってキモいな
きもいしイレギュラーだから使い方忘れるわ
0356nobodyさん2008/05/12(月) 14:59:47ID:???
つーか、loadを名詞に使うなYO!
0357nobodyさん2008/05/12(月) 21:14:35ID:???
うん、それは自分もきもいと思った。
慣れればいいだけだが。
0358nobodyさん2008/05/15(木) 07:22:57ID:33ekN+Ad
コントローラで、
function index()
{
echo 'Hello World!'
}
のように、構文に間違いがあっても、エラーも何も表示されません。
どうしたらエラーの箇所がわかるのでしょうか?
0359nobodyさん2008/05/15(木) 09:39:21ID:???
>>358
application/config/config.phpのログの設定のところ見れ。
PHPエラーもログに放り込む設定になってないか?
0360nobodyさん2008/05/15(木) 18:47:08ID:???
>>359
$config['log_threshold'] = 0;
となっている。ログに放り込む設定にはなっていないと思う。

ちなみに、使っているのは 1.5.4

1.6.x だと index.php
0361nobodyさん2008/05/15(木) 18:48:27ID:???
(ごめん 途中で書き込んでしまった)

1.6.x だと index.php をブラウザで見ても何も表示されないけど、
Apache か PHP の設定が何かおかしいのかなぁ?
0362nobodyさん2008/05/15(木) 20:11:20ID:33ekN+Ad
1.5.4 のソースを読むと、
set_error_handler('_exception_handler');
でエラーハンドラを設定しているようですが、
function _exception_handler($severity, $message, $filepath, $line)
は値を返さず return しています。
PHP のマニュアルには 5.2.0 では「エラーハンドラは必ず FALSE を返さなければなりません」
と書いてあります。
ci 1.5.4 は PHP 5.2.0 以上には対応していないってことでしょうか?
03633582008/05/15(木) 20:43:44ID:???
解決しました
構文エラーがあってもエラーメッセージが表示されなかったのは php.ini で
display_errors = Off
としているからでした。
お騒がせして&ci のエラーハンドリングを疑って大変申し訳ありませんでした m(_ _)m
0364nobodyさん2008/05/16(金) 13:43:36ID:???
フォームヘルパー使うとCSSは凝ったこと出来なくなるし、javascriptとの絡ませ方を間違いそうだし、
表示系はviewに手打ちが基本?
0365nobodyさん2008/05/16(金) 13:49:39ID:???
ヘルパをラッパーしたらいいじゃん
0366nobodyさん2008/05/16(金) 15:15:12ID:???
CIのviewは使って無いなぁ。
Flexy突っ込んで使ってる。
0367nobodyさん2008/05/16(金) 18:28:03ID:???
つまりまともに段組したければ、view側にヘルパーのコードを書くことになる。
view側では文字数減るが、コントローラ側と合わせれば同程度かむしろ増える。
他の人が変数自体や変数に入れたnameやid確認したければ、わざわざコントローラのファイル見に行くことになる。
結局ふつうのフォームは生htmlでviewに書くことにするからメンテナンス請け負った人は客や上司の前で批判しないように。
0368nobodyさん2008/05/18(日) 03:29:10ID:???
セキュリティー的に、www掘ってそこにindex.php置くべきだよなぁ
すべてのphpファイルの前に
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
なんて書くよりその方がずっと簡単でスマートなのにエリスはあほなの?
0369nobodyさん2008/05/18(日) 08:20:55ID:???
そうしなくても使えるように配慮したからだろJK
0370nobodyさん2008/05/18(日) 10:36:08ID:???
>>368
index.phpを1行いじれば(つか「.」1個打つだけw)BASEPATHをドキュメントルート外に
置く使い方ができるんだから、そうすればいいだけの話。
0371nobodyさん2008/05/18(日) 15:03:34ID:???
しょぼいレン鯖でもドキュメントルート外にファイル置けるだろ
何のためにそんな配慮したのか意味不明JK
0372nobodyさん2008/05/18(日) 15:10:43ID:???
>意味不明JK
お前の文章が意味不明
0373nobodyさん2008/05/18(日) 18:09:00ID:???
じゃあドキュメントルート外にファイル置けないレンタルサーバ言って見ろよッ!
JK!
0374nobodyさん2008/05/18(日) 19:45:51ID:???
人は死ぬ
必ず死ぬ
絶対死ぬ
死は避けられない

私は死ぬ
必ず死ぬ
絶対死ぬ
死は避けられない

あなたは死ぬ
必ず死ぬ
絶対死ぬ
死は避けられない

死を忘れていても
死をごまかしていても
今日はまだ死なないだろうと思っていても
死から逃れることは誰もできない

全ては無常
過ぎた時間は終わってしまえば瞬間だった
まだ遠い先の未来のことだと思っている死も確実にやって来る
memento mori - 汝の死の瞬間を迎えるときを想え
0375nobodyさん2008/05/18(日) 21:12:02ID:???
>>373
ロリポップ
0376nobodyさん2008/05/19(月) 02:14:56ID:???
ロリポしょぼっ
さすが女子供用のレン鯖だな
0377nobodyさん2008/05/21(水) 06:09:08ID:???
今時Layoutつかえねーのかこれ・・・
呆れ果てたぜ!
0378nobodyさん2008/05/26(月) 10:05:45ID:???
>>377
Layoutって何ですか?
他のフレームワークにはそういう便利な機能がついているんですか?
0379nobodyさん2008/05/27(火) 18:50:32ID:???
複数の画面で共通した
大枠のテンプレートが使える機能だよ
最近のフレームワークじゃ常識になってる
0380nobodyさん2008/05/28(水) 00:33:16ID:???
>>379
Flexy組み込んで実装してる。
Codeigniterにはいらなくね?
俺は余計な機能ゴタゴタつけないで、常にシンプルに保って欲しい。
ライブラリとかプラグイン、ヘルパがあるんだし、欲しい物は自分で追加できた方が嬉しい。
0381nobodyさん2008/06/04(水) 19:01:53ID:???
GETでルーティングする方法ってないんかな。
0382nobodyさん2008/06/05(木) 01:46:11ID:R522EZcR
>>381
http://userguide.cilab.info/general/urls.html
クエリ文字列の有効化
URLに次のようなクエリ文字列を使用したい場面もあると思います:
index.php?c=products&m=view&id=345
CodeIgniter ではオプションでこのようなことにも対応しています。この機能は、application/config.php ファイルで有効にすることができます。

↑こういうこと?
0383nobodyさん2008/06/05(木) 09:41:07ID:???
>>382
ばっちしこれです。タンクス。
0384nobodyさん2008/06/05(木) 11:55:45ID:???
URIルーティングでもGETには変わりないから
なんのこっちゃと思った
0385nobodyさん2008/06/06(金) 02:27:23ID:???
このスレを見ている人はこんなスレも見ています。(ver 0.20)
ドラクエの住人がルー大柴だったら [FF・ドラクエ]
昔疎遠になった幼馴染が引っ越してきた [不倫・浮気]
エイチ・エス・フューチャーズ [先物]
POINT-BOX ポイントボックス 8 [ポイント・マイル]
好きなギャルゲーをつまらなさそうに説明づるスレ [ギャルゲー]

ci使いって一体・・・
0386nobodyさん2008/06/06(金) 05:21:57ID:???
ふと思ったが、URIクエリパラメータを「GET」っていうのは、PHPer以外にも通じる用語なのかな?
# $_GET ならともかく
0387nobodyさん2008/06/07(土) 01:05:47ID:???
>>386
formのmethod属性で、POST、GETというんだから、GETは他言語でもGETなんでないの。
0388nobodyさん2008/06/07(土) 01:08:01ID:???
>>386
リクエストメソッドって知ってる?
0389nobodyさん2008/06/07(土) 01:19:24ID:???
>>388
GET / HTTP/1.1
HOST: www.example.com

みたいな?一応知ってますよ、と
>>387のHTMLのform要素としてのGETパラメータ、っていう意味でなら通じると。納得。
0390nobodyさん2008/06/08(日) 13:11:00ID:oe9fgjbi
>>386
「GET」云々はプログラム言語の仕様の話ではなくて、「HTTP」の仕様・仕組みの話だから、PHPとは関係なく説明に使えますね^^

http://docs.sun.com/source/816-5668-10/esaphttp.htm#1004513
HyperText Transfer Protocol (HTTP) の基本を簡単に紹介します。

●クライアントからサーバへのリクエストには、次の情報が含まれます。
・リクエスト メソッド
・リクエスト ヘッダ
・リクエスト データ

●リクエスト メソッド
クライアントは多くのメソッドを使って情報を要求することができます。
一般的には次の方法が使われます。
・GET 特定のドキュメントを要求します。
・HEAD ドキュメントのヘッダ情報だけを要求します。
・POST サーバの、クライアントからのデータ受信を要求します。CGI プログラムのフォーム入力などです。
・PUT サーバのドキュメントの内容を、クライアントからのデータに置換します。
0391nobodyさん2008/06/08(日) 13:13:24ID:oe9fgjbi
http://www.studyinghttp.net/method#HTTP1.1_Method
HTTP/1.1 メソッド

GET
HEAD
POST
PUT
DELETE
OPTIONS
TRACE
CONNECT
PATCH
LINK, UNLINK
0392nobodyさん2008/06/08(日) 14:06:34ID:???
そうゆうことです
0393nobodyさん2008/06/08(日) 14:51:40ID:???
どういうこと?
0394nobodyさん2008/06/09(月) 00:01:07ID:???
>>393
クライアント(自分のマシン)が、サーバー(WEBサーバー)に対して、「このデータを送ってくれ!」と呼びかける方法がいろいろ用意されている。
その中の一つとして、GETやPOST等の方法が用意されている。
ということだよ^^

「HTTP」でGoogle検索すると詳しく解説しているページが、たくさん見つかるよ☆
0395nobodyさん2008/06/09(月) 06:12:49ID:???
?hoge=poge
とか付けなくても普通にページ呼び出してたらそれすなわちGETなのだ
0396nobodyさん2008/06/10(火) 05:51:57ID:???
ci徹底入門が発売されたもよん
買った人どう?
まぁ本読むまでもない程シンプルなのがciだと思うが・・
0397nobodyさん2008/06/11(水) 17:14:01ID:???
mixiから転載。
--
bossatama
---
■社名
株式会社 音生(ネオ)
■募集人材と雇用形態
・事務(女性)
・PHPプログラマ アルバイト(男女)
■想定勤務時間
週3日以上希望 残業等なし
■想定勤務地
名古屋市中区金山
■担当してもらう予定の業務
  ・事務(女性)
・PHPフレームワークを利用したWebアプリケーションの開発
■報酬
自給1000円〜2000円 実力に応じて相談させてください。
■希望人材(スキル・年齢・住居地など)
PHPの初心者歓迎。教育できます。男女学生大歓迎、転職やリターンもOK。
  事務をやりながら、デザイン(html)やプログラムを勉強する方もOKです。
■募集期限
2008年7月終わり
■連絡先
「アルバイト希望」として、連絡先をmixiメールにてお願いします。
■その他(好きなだけアピールしてください)
AUの公式サイト「バンドナビ」を運営。音楽大好き!
http://band-navi.com/
  日本CodeIgniterユーザ会の主催会社
  http://codeigniter.jp/
--
会社が主催してるらしい
0398nobodyさん2008/06/11(水) 20:16:55ID:???
営利企業が勝手にユーザ会とか名乗るのやめて欲しい
0399nobodyさん2008/06/11(水) 21:54:47ID:???
>>396
615ページぐらいあって、やたらでかくて高かった。3800円とか。

開発環境の構築の仕方とかが最初に書いてあって(Eclipse/PDT)、
今までフレームワーク使うまでも無い小さい案件ぐらいしかやったことねぇよ、って言う人むけな感じ。

●サンプルコードも、
・コンタクトフォームを作る
・モバイル対応簡易掲示板を作る
・簡易ショッピングサイトを作る
程度に収まってる。

CIは、Web上に日本語のマニュアル転がってるし、
勘のいい人とか、適当にいろいろフレームワーク渡り歩いてた人とかは必要ないかも。

って、数ページペラペラめくって思った。
そんなに小技とか、そういうのは乗ってない雰囲気でございます。
0400nobodyさん2008/06/12(木) 13:55:53ID:5LtH7vFx
初心者PG向けに良いFWだね。
他のFWとは対象者がバッティングしないと。
0401nobodyさん2008/06/16(月) 03:40:01ID:???
>>396
PHP初心者だけど、結構ありがたい本。
環境構築からデバッグ方法、フレームワークの基礎的な概念も説明してるし。

リファレンス部も、サンプルコードが充実してるのがありがたい。
迷った時には、この本開けば即解決になる確率が高い。

フレームワークとかの、言語以外の範囲の入門書って、イマイチそういう
迷ったときに解決する為の「当たり」ページを引く確率低いってイメージ
あるから、俺的にはこの本はお勧めできる。

ただ、CI内部のコードとかバリバリ読めて、ネット上からさくさく自分の
探してる情報が引き出せて、CIに機能が無ければ自分でガリガリ書くって
いうようなパワーユーザは、ものたりないって言うかもしれないね。
0402nobodyさん2008/06/16(月) 04:05:37ID:???
なんか宣伝くせーな
0403nobodyさん2008/06/16(月) 10:32:47ID:uqAO2CKu
昨日本屋で見てきました。
パラパラとしか見てないけど、即買い!という判断には至らなかった。
自分が本を買う基準の一つとして、購入後の利用頻度を考慮しますが、2〜3回読んだら終わりかな?と思ったので。

>>401
フレームワーク自体に慣れてない人、初心者にとっては役立つ
=CIのマニュアル代わりとして使う用途なら、紙ベースなので便利
と思いました。
0404nobodyさん2008/06/17(火) 20:04:27ID:???
他のFW本よりもわかりやすかったよ。
CIそのものが簡単ということなのかな。
0405nobodyさん2008/06/24(火) 05:50:32ID:???
404エラーページの取り回しダサくね?
標準の処理と同じコンテクストで処理するのが自然なんだから
エラー用のクラス名とメソッド名だけ指定するようにするべきだろJK
しかもビューチフルにハックもしにくいし
所詮ハゲが書いたFWか・・
0406nobodyさん2008/06/26(木) 00:50:52ID:???
と、ハックに挫折したハゲが申しております。
0407nobodyさん2008/06/26(木) 00:55:50ID:???
config周辺もひどい
アメ公の美意識の低さは異常
0408nobodyさん2008/07/01(火) 04:00:36ID:???
CIでXoopsモジュールとか作った人いたりする?
0409nobodyさん2008/07/02(水) 18:00:54ID:???
Fatal error: Call to a member function get() on a non-object in C:\xampp\htdocs\ci\system\application\controllers\blog.php on line 15

DBオブジェクトが取れてないようなんだけど、取れてない部分のエラーが出てこないのはなんで?
0410nobodyさん2008/07/02(水) 18:12:41ID:???
ライブラリが登録されてなかった。

でもエラーが出ないのはうんこだろ。
0411nobodyさん2008/07/03(木) 10:15:29ID:XZ5SMLTk
AppControllerとかAppModelとかおきたい場合って
どうすればいいんでしょうか?
0412nobodyさん2008/07/03(木) 17:29:46ID:EmmaV8CT
管理者用の画面を作るときって どうやってる?

controller/admin 掘って そこにコントローラ置いて
あとは admin にルーティングすればいいのかな?

ログイン認証なんかのコントローラとか どうやってわけるのがいいんだろう…
0413nobodyさん2008/07/03(木) 17:40:04ID:???
>>412
ぶっちゃけ、どんなURLにしたいかで変わる様な気がする
別ドメインがよければ、Apacheの設定も絡むし。
一般的なのはどんな感じなんだろうねえ
04144122008/07/03(木) 17:54:55ID:???
>>413

ありがとう そだね

とりあえずは controller/admin/ にディレクトリ掘って
そこに置くことにした


あと 管理者関連のコントローラだけ 共通の認証チェック処理いれたいんだけど
その辺のやり方がわからない


前にCakePHPさわったときは beforeFilter なんかで
コントローラ共通の処理入れられたんだけど
CIは 自分でControllerクラス継承して 作らないとだめなのかな?

管理ページ周りの処理で 参考になるとこあったら教えてください…
04154122008/07/03(木) 18:02:00ID:???
Controllerクラス継承して作る場合は
>>411 の言ってることと同じだね


一応 コアクラスの継承は

system/application/library/ に Controllerクラスを継承したMY_Controller.php
とか作ればいいみたいだよ


ログイン認証の共通処理も そうやってAppController 作ればいいんかな…
その辺りの情報がないから どうやるのがいいのか
いまいちわからん
0416nobodyさん2008/07/03(木) 18:06:26ID:???
>>414
CIさわらずにKohana触ってる邪道な俺だけど、俺も知りたい
便乗w

俺は、libraries の中にBaseController, UserController, AdminController って作っちゃったな・・・

誰か、筋の良いやり方を教えて
04174122008/07/03(木) 18:12:02ID:???
>>415

ちょいウソあったw

AppControllerじゃなくて MY_Controller だね

/system/application/library/MY_Controller.php

class MY_Controller extends Controller {
function MY_Controller() {
parent::Controller();
}
}

こんな感じ。

ログインの共通処理も ここでやろうかと思ったんだけど
それでいいのかがわからん…

>>416 みたいに 種類ごとにクラス作ったほうがいい気もするし…
04184122008/07/03(木) 18:52:48ID:???
>>417 の方法でやってるんだが
/system/application/libraries/MY_Controller.php

のようなの作れば コアクラスは自動で置き換わるらしいんだが
置き換わらないな

コントローラ側で

class bbs extends MY_Controller {
}

みたいに MY_ つけてやらないとダメ
CIのルールだとデフォでMY_付けることになってるけど
これじゃ意味ないじゃん

バグ?
0419nobodyさん2008/07/03(木) 18:57:59ID:???
[/system/application/libraries/MY_Controller.php]
class TEST_Controller extends Controller {
}


[/system/application/controllers/test.php]
class Bbs extends TEST_Controller {
}

にしてもいけちゃう



class Bbs extends Controller {
}

だと TEST_Controller が継承されない
(ルール通りにクラス名を MY_Controller にしても場合も同じ)


コアクラス、置き換わってない…
バグくさいね orz
04204122008/07/03(木) 19:38:23ID:???
ぼけてた 釣ってくる…


でも「コアクラスを拡張する場合のクラス名には MY_ を付ける」
っていう ルールは意味がないね


http://codeigniter.jp/user_guide_ja/general/core_classes.html


ファイルは MY_ 付けないと読み込んでくれないみたいだけど、
クラス名は別に MY_ 付ける必要ないよね?

なんでこんなこと書いてるんだろう
0421nobodyさん2008/07/03(木) 20:15:07ID:???
英語版にはちゃんとした事書いてたりするけ?
0422411 2008/07/03(木) 20:23:33ID:XZ5SMLTk
事故解決してたんだけどありがとう。

ただAppModelは相変わらずわかりません。
どのタイミングでロードすればええんですか?
Hook系もだめぽでした。
04234122008/07/03(木) 22:43:11ID:???
>>422

>>419-420 の方法じゃだめなの?

クラス名 MY_ つけなくてもいけるっぽいから
AppControllerにしとけばいいんじゃ

よくわからん ルールだなあ


おれはてっきり Controller そのものを置き換えてくれるとおもったんだが
ライブラリとかヘルパはそうだよね
0424nobodyさん2008/07/04(金) 15:09:16ID:???
>>422
コントローラはMY_Controllerをextendsして書いてるが、
モデルは仕方ないので各モデルの冒頭で
<?php
require_once(APPPATH."libraries/MY_Model.php");

class Hoge_model extends MY_Model
0425nobodyさん2008/07/14(月) 11:55:08ID:???
$this->db->insert() するときに, created_at とか updated_at というカラムに current_timestamp を指定したいんだけど、どうやったらいいの?
$array = array('name'=>'Foo', 'created_at'=>'current_timestamp');
として insert() してみたけど、current_timestamp にならず 0000-00-00 00:00:00 になった。
ちなみにMySQL5.0
0426nobodyさん2008/07/14(月) 12:05:24ID:???
>>425
Database に、escapeしないでsetする方法ってあったっけ?
それがsetメソッドなら、
$db->エスケープしないset('create_at', '式');
$db->insert('テーブル名') でいけるような気がする。

以上想像。なければ、Databaseを拡張する必要があるかも?
俺もこの辺知りたい。ソース嫁って感じだけど
0427nobodyさん2008/07/14(月) 12:12:17ID:???
NOW()とかも文字列として扱っちゃうから
date('Y-m-d H:i:s') にするしかないと思う

オレは
function now()
{
return date('Y-m-d H:i:s');
}
っていう関数を作ってある
0428nobodyさん2008/07/14(月) 19:00:27ID:???
>>426-427
さんくすです。
できないみたいなので、
fuction current_timestamp() {
return date('Y-m-d H:i:s');
}
を使うことにしました。
でもこれだと、application server と database server が別だと
時刻を必ず揃えておく必要がありますね。
0429nobodyさん2008/07/14(月) 19:12:37ID:???
>>428
サーバの管理がきっちり出来ていれば、どんなサーバも1秒と違わないはずなので、時刻で
よっぽどシビアなソートやチェックをしていない限り、それは大丈夫かと。
また、原則からいうなら元々どちらかに合わせるべきなので、DBの関数が使えない時点で
application側の時刻のみを使うのが必然となるかな。

サーバ間の時刻あわせとは、微妙に話が違うような。
0430nobodyさん2008/07/14(月) 19:47:05ID:???
>>426-428
date_helperのunix_to_human じゃダメなのか?

unix_to_human(time(),TRUE,'eu');
0431nobodyさん2008/07/15(火) 06:26:58ID:???
うちでは、まず application/helpers/database_helper.php として↓を用意して

class SafeMarker {
  private $_str;
  public function __construct($str) { $this->_str = $str; }
  public function __toString() { return $this->_str; }
}
function mark_as_safe($str) {
  return new SafeMarker($str);
}

モデルの中でこんな感じで使ってますよ

$this->load->helper('database');
$this->db->set('foo', $bar);
$this->db->set('created_at', mark_as_safe('NOW()'));
$this->db->insert('mytable');

CI_DB_driver#escape を読むとわかるけど、gettype で 'string' でも 'boolean' でも
NULL でもない値はスルーしてくれるので、オブジェクトでラップすると通る。
ただし __toString はPHP5からかな。
一種のhackなので、NOW()みたいな安全だとわかっているものにしか使いませんが。
0432nobodyさん2008/07/15(火) 07:42:14ID:???
>>431
なんちゅうか、バッドノウハウの香りがw
> gettype で 'string' でも 'boolean' でもNULL でもない値はスルーしてくれる
っていう実装自体も、それに依存してるっていうのも、なんだかなあw

オブジェクトを渡されて、上記みたいにすることも前提にしてるのかな?>CI
(それなら、素直にescapeを回避するset系メソッドをつければいいのではと)
04334312008/07/15(火) 12:59:01ID:???
>>432
どうみてもBKです。本当に(ry
CI内部の実装依存だからCIをバージョンアップすると動かなくなるかも。

個人的には、gettypeを見て判定、の部分はとりたてておかしなコードでは
ないので、マイナーバージョンアップであれば大丈夫だろうという甘い期待w
最悪、mark_as_safe で grep して置き換えれば、なんとかなるだろうとかw
素人にも玄人にもオヌヌメできない。\(^o^)/
04344312008/07/15(火) 13:07:49ID:???
ってよくみたら set($key, $value = '', $escape = TRUE) って
第三引数があるじゃねーかw

$this->db->set('created_at', 'NOW()', FALSE);

で多分いけるね・・・ orz
0435nobodyさん2008/07/15(火) 13:10:36ID:???
>>434
でもそれだと
$this->db->insert('tablename', array('created_at'=>'NOW()'));
とかができないよね。
431の方法のほうが個人的に好み。
0436nobodyさん2008/07/15(火) 13:15:25ID:???
そういうの考えるのが面倒くさかったので、デフォで$this->db->insert($tablename, $valuearray);時は
created_atに作成日時をつっこみ、$this->db->update($tablename, $valuearray);時はupdated_atに
更新日時を突っ込むようにCI_DBを変更して使ってる。
バッドノウハウなのは百も承知だが、symfonyから流れてきた人にはこれが手放せないのよorz
0437nobodyさん2008/07/15(火) 17:00:08ID:???
>>436
それはDBのNOW()やCURRENT_TIMESTAMP()を使うの?
それともPHPのdate()を使うの?
前者ならまねしたいなあ
0438nobodyさん2008/08/02(土) 09:47:59ID:???
いつの間にか1.5から1.6になってる。
なんかかわったの?
0439nobodyさん2008/08/03(日) 18:45:02ID:znW3bDml
あれ、$this->dbがなくなってね?
0440nobodyさん2008/08/03(日) 19:04:30ID:???
kantigaidatta
■ このスレッドは過去ログ倉庫に格納されています