1 名前:nobodyさん mailto:sage [2007/04/27(金) 23:17:16 ID:???] 公式:www.codeigniter.com/ チュートリアル:codeigniter.com/tutorials/ ユーザガイド日本語訳:ci-user-guide-ja.nought-point-999.net/ 小回りの利くフレームワークの話題をひとつ!
400 名前:nobodyさん [2008/06/12(木) 13:55:53 ID:5LtH7vFx] 初心者PG向けに良いFWだね。 他のFWとは対象者がバッティングしないと。
401 名前:nobodyさん mailto:sage [2008/06/16(月) 03:40:01 ID:???] >>396 PHP初心者だけど、結構ありがたい本。 環境構築からデバッグ方法、フレームワークの基礎的な概念も説明してるし。 リファレンス部も、サンプルコードが充実してるのがありがたい。 迷った時には、この本開けば即解決になる確率が高い。 フレームワークとかの、言語以外の範囲の入門書って、イマイチそういう 迷ったときに解決する為の「当たり」ページを引く確率低いってイメージ あるから、俺的にはこの本はお勧めできる。 ただ、CI内部のコードとかバリバリ読めて、ネット上からさくさく自分の 探してる情報が引き出せて、CIに機能が無ければ自分でガリガリ書くって いうようなパワーユーザは、ものたりないって言うかもしれないね。
402 名前:nobodyさん mailto:sage [2008/06/16(月) 04:05:37 ID:???] なんか宣伝くせーな
403 名前:nobodyさん [2008/06/16(月) 10:32:47 ID:uqAO2CKu] 昨日本屋で見てきました。 パラパラとしか見てないけど、即買い!という判断には至らなかった。 自分が本を買う基準の一つとして、購入後の利用頻度を考慮しますが、2〜3回読んだら終わりかな?と思ったので。 >>401 フレームワーク自体に慣れてない人、初心者にとっては役立つ =CIのマニュアル代わりとして使う用途なら、紙ベースなので便利 と思いました。
404 名前:nobodyさん mailto:sage [2008/06/17(火) 20:04:27 ID:???] 他のFW本よりもわかりやすかったよ。 CIそのものが簡単ということなのかな。
405 名前:nobodyさん mailto:sage [2008/06/24(火) 05:50:32 ID:???] 404エラーページの取り回しダサくね? 標準の処理と同じコンテクストで処理するのが自然なんだから エラー用のクラス名とメソッド名だけ指定するようにするべきだろJK しかもビューチフルにハックもしにくいし 所詮ハゲが書いたFWか・・
406 名前:nobodyさん mailto:sage [2008/06/26(木) 00:50:52 ID:???] と、ハックに挫折したハゲが申しております。
407 名前:nobodyさん mailto:sage [2008/06/26(木) 00:55:50 ID:???] config周辺もひどい アメ公の美意識の低さは異常
408 名前:nobodyさん mailto:sage [2008/07/01(火) 04:00:36 ID:???] CIでXoopsモジュールとか作った人いたりする?
409 名前:nobodyさん mailto:sage [2008/07/02(水) 18:00:54 ID:???] 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オブジェクトが取れてないようなんだけど、取れてない部分のエラーが出てこないのはなんで?
410 名前:nobodyさん mailto:sage [2008/07/02(水) 18:12:41 ID:???] ライブラリが登録されてなかった。 でもエラーが出ないのはうんこだろ。
411 名前:nobodyさん [2008/07/03(木) 10:15:29 ID:XZ5SMLTk] AppControllerとかAppModelとかおきたい場合って どうすればいいんでしょうか?
412 名前:nobodyさん [2008/07/03(木) 17:29:46 ID:EmmaV8CT] 管理者用の画面を作るときって どうやってる? controller/admin 掘って そこにコントローラ置いて あとは admin にルーティングすればいいのかな? ログイン認証なんかのコントローラとか どうやってわけるのがいいんだろう…
413 名前:nobodyさん mailto:sage [2008/07/03(木) 17:40:04 ID:???] >>412 ぶっちゃけ、どんなURLにしたいかで変わる様な気がする 別ドメインがよければ、Apacheの設定も絡むし。 一般的なのはどんな感じなんだろうねえ
414 名前:412 mailto:sage [2008/07/03(木) 17:54:55 ID:???] >>413 ありがとう そだね とりあえずは controller/admin/ にディレクトリ掘って そこに置くことにした あと 管理者関連のコントローラだけ 共通の認証チェック処理いれたいんだけど その辺のやり方がわからない 前にCakePHPさわったときは beforeFilter なんかで コントローラ共通の処理入れられたんだけど CIは 自分でControllerクラス継承して 作らないとだめなのかな? 管理ページ周りの処理で 参考になるとこあったら教えてください…
415 名前:412 mailto:sage [2008/07/03(木) 18:02:00 ID:???] Controllerクラス継承して作る場合は >>411 の言ってることと同じだね 一応 コアクラスの継承は system/application/library/ に Controllerクラスを継承したMY_Controller.php とか作ればいいみたいだよ ログイン認証の共通処理も そうやってAppController 作ればいいんかな… その辺りの情報がないから どうやるのがいいのか いまいちわからん
416 名前:nobodyさん mailto:sage [2008/07/03(木) 18:06:26 ID:???] >>414 CIさわらずにKohana触ってる邪道な俺だけど、俺も知りたい 便乗w 俺は、libraries の中にBaseController, UserController, AdminController って作っちゃったな・・・ 誰か、筋の良いやり方を教えて
417 名前:412 mailto:sage [2008/07/03(木) 18:12:02 ID:???] >>415 ちょいウソあったw AppControllerじゃなくて MY_Controller だね /system/application/library/MY_Controller.php class MY_Controller extends Controller { function MY_Controller() { parent::Controller(); } } こんな感じ。 ログインの共通処理も ここでやろうかと思ったんだけど それでいいのかがわからん… >>416 みたいに 種類ごとにクラス作ったほうがいい気もするし…
418 名前:412 mailto:sage [2008/07/03(木) 18:52:48 ID:???] >>417 の方法でやってるんだが /system/application/libraries/MY_Controller.php のようなの作れば コアクラスは自動で置き換わるらしいんだが 置き換わらないな コントローラ側で class bbs extends MY_Controller { } みたいに MY_ つけてやらないとダメ CIのルールだとデフォでMY_付けることになってるけど これじゃ意味ないじゃん バグ?
419 名前:nobodyさん mailto:sage [2008/07/03(木) 18:57:59 ID:???] [/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
420 名前:412 mailto:sage [2008/07/03(木) 19:38:23 ID:???] ぼけてた 釣ってくる… でも「コアクラスを拡張する場合のクラス名には MY_ を付ける」 っていう ルールは意味がないね codeigniter.jp/user_guide_ja/general/core_classes.html ファイルは MY_ 付けないと読み込んでくれないみたいだけど、 クラス名は別に MY_ 付ける必要ないよね? なんでこんなこと書いてるんだろう
421 名前:nobodyさん mailto:sage [2008/07/03(木) 20:15:07 ID:???] 英語版にはちゃんとした事書いてたりするけ?
422 名前:411 [2008/07/03(木) 20:23:33 ID:XZ5SMLTk] 事故解決してたんだけどありがとう。 ただAppModelは相変わらずわかりません。 どのタイミングでロードすればええんですか? Hook系もだめぽでした。
423 名前:412 mailto:sage [2008/07/03(木) 22:43:11 ID:???] >>422 >>419-420 の方法じゃだめなの? クラス名 MY_ つけなくてもいけるっぽいから AppControllerにしとけばいいんじゃ よくわからん ルールだなあ おれはてっきり Controller そのものを置き換えてくれるとおもったんだが ライブラリとかヘルパはそうだよね
424 名前:nobodyさん mailto:sage [2008/07/04(金) 15:09:16 ID:???] >>422 コントローラはMY_Controllerをextendsして書いてるが、 モデルは仕方ないので各モデルの冒頭で <?php require_once(APPPATH."libraries/MY_Model.php"); class Hoge_model extends MY_Model
425 名前:nobodyさん mailto:sage [2008/07/14(月) 11:55:08 ID:???] $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
426 名前:nobodyさん mailto:sage [2008/07/14(月) 12:05:24 ID:???] >>425 Database に、escapeしないでsetする方法ってあったっけ? それがsetメソッドなら、 $db->エスケープしないset('create_at', '式'); $db->insert('テーブル名') でいけるような気がする。 以上想像。なければ、Databaseを拡張する必要があるかも? 俺もこの辺知りたい。ソース嫁って感じだけど
427 名前:nobodyさん mailto:sage [2008/07/14(月) 12:12:17 ID:???] NOW()とかも文字列として扱っちゃうから date('Y-m-d H:i:s') にするしかないと思う オレは function now() { return date('Y-m-d H:i:s'); } っていう関数を作ってある
428 名前:nobodyさん mailto:sage [2008/07/14(月) 19:00:27 ID:???] >>426-427 さんくすです。 できないみたいなので、 fuction current_timestamp() { return date('Y-m-d H:i:s'); } を使うことにしました。 でもこれだと、application server と database server が別だと 時刻を必ず揃えておく必要がありますね。
429 名前:nobodyさん mailto:sage [2008/07/14(月) 19:12:37 ID:???] >>428 サーバの管理がきっちり出来ていれば、どんなサーバも1秒と違わないはずなので、時刻で よっぽどシビアなソートやチェックをしていない限り、それは大丈夫かと。 また、原則からいうなら元々どちらかに合わせるべきなので、DBの関数が使えない時点で application側の時刻のみを使うのが必然となるかな。 サーバ間の時刻あわせとは、微妙に話が違うような。
430 名前:nobodyさん mailto:sage [2008/07/14(月) 19:47:05 ID:???] >>426-428 date_helperのunix_to_human じゃダメなのか? unix_to_human(time(),TRUE,'eu');
431 名前:nobodyさん mailto:sage [2008/07/15(火) 06:26:58 ID:???] うちでは、まず 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()みたいな安全だとわかっているものにしか使いませんが。
432 名前:nobodyさん mailto:sage [2008/07/15(火) 07:42:14 ID:???] >>431 なんちゅうか、バッドノウハウの香りがw > gettype で 'string' でも 'boolean' でもNULL でもない値はスルーしてくれる っていう実装自体も、それに依存してるっていうのも、なんだかなあw オブジェクトを渡されて、上記みたいにすることも前提にしてるのかな?>CI (それなら、素直にescapeを回避するset系メソッドをつければいいのではと)
433 名前:431 mailto:sage [2008/07/15(火) 12:59:01 ID:???] >>432 どうみてもBKです。本当に(ry CI内部の実装依存だからCIをバージョンアップすると動かなくなるかも。 個人的には、gettypeを見て判定、の部分はとりたてておかしなコードでは ないので、マイナーバージョンアップであれば大丈夫だろうという甘い期待w 最悪、mark_as_safe で grep して置き換えれば、なんとかなるだろうとかw 素人にも玄人にもオヌヌメできない。\(^o^)/
434 名前:431 mailto:sage [2008/07/15(火) 13:07:49 ID:???] ってよくみたら set($key, $value = '', $escape = TRUE) って 第三引数があるじゃねーかw $this->db->set('created_at', 'NOW()', FALSE); で多分いけるね・・・ orz
435 名前:nobodyさん mailto:sage [2008/07/15(火) 13:10:36 ID:???] >>434 でもそれだと $this->db->insert('tablename', array('created_at'=>'NOW()')); とかができないよね。 431の方法のほうが個人的に好み。
436 名前:nobodyさん mailto:sage [2008/07/15(火) 13:15:25 ID:???] そういうの考えるのが面倒くさかったので、デフォで$this->db->insert($tablename, $valuearray);時は created_atに作成日時をつっこみ、$this->db->update($tablename, $valuearray);時はupdated_atに 更新日時を突っ込むようにCI_DBを変更して使ってる。 バッドノウハウなのは百も承知だが、symfonyから流れてきた人にはこれが手放せないのよorz
437 名前:nobodyさん mailto:sage [2008/07/15(火) 17:00:08 ID:???] >>436 それはDBのNOW()やCURRENT_TIMESTAMP()を使うの? それともPHPのdate()を使うの? 前者ならまねしたいなあ
438 名前:nobodyさん mailto:sage [2008/08/02(土) 09:47:59 ID:???] いつの間にか1.5から1.6になってる。 なんかかわったの?
439 名前:nobodyさん [2008/08/03(日) 18:45:02 ID:znW3bDml] あれ、$this->dbがなくなってね?
440 名前:nobodyさん mailto:sage [2008/08/03(日) 19:04:30 ID:???] kantigaidatta
441 名前:nobodyさん mailto:sage [2008/08/20(水) 20:18:05 ID:???] CI使ってる人間ってどれぐらいいるんだろうか
442 名前:nobodyさん mailto:sage [2008/08/20(水) 20:44:32 ID:???] 17人
443 名前:nobodyさん mailto:sage [2008/08/22(金) 13:30:33 ID:???] CIってforward とか redirect とかはどうやるの?
444 名前:nobodyさん mailto:sage [2008/08/23(土) 00:51:34 ID:???] headerで自分で
445 名前:nobodyさん mailto:sage [2008/08/23(土) 01:26:31 ID:???] helperとか無かったっけ まあぶっちゃけ自分でheader(ほげほげ)書くのと変わらないけど
446 名前:nobodyさん [2008/08/25(月) 13:31:03 ID:Ziu2Tqsv] CodeIgniterでは、URLは「コントローラ名/メソッド名」というのが基本ですが、 このパターンを変更することはできますか。 やりたいのは、 - /blog/index - /blog/show - /blog/create - /blog/edit というのではなく、 - /blog/maka - /blog/blackstar - /blog/deaththekid のように「コントローラ名/ユーザ名」のようにしたいということです。 つまり /blog 以下のアクセスをある特定のメソッドに縛りたいということです。
447 名前:nobodyさん mailto:sage [2008/08/25(月) 15:36:16 ID:???] >>446 ヒント config/routes.php codeigniter.com/user_guide/general/routing.html userguide.cilab.info/general/routing.html
448 名前:nobodyさん mailto:446 [2008/08/26(火) 15:08:09 ID:???] >>447 ありがとうございます!
449 名前:nobodyさん mailto:446 [2008/08/26(火) 15:24:29 ID:???] Routingについて質問です。 ユーザーズガイドの例にあったのですが、 $route['product/:num'] = "catalog/product_lookup"; という設定をした場合、「:num」の値は Catalog->product_lookup() の中で どうやって取得すればいいのでしょうか。 通常だと Catalog->product_lookup() の引数にこの値が渡されますが、 試したところ、$route[] を設定した場合は渡されないようです。
450 名前:nobodyさん mailto:446 [2008/08/26(火) 15:37:11 ID:???] >>449 英語のドキュメントに書いてありました。 $route['product/(:num)'] = "catalog/product_lookup_by_id/$1"; でいいみたいですね。 お騒がせしました。
451 名前:nobodyさん [2008/08/28(木) 12:20:46 ID:B/844Qiw] $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query($sql, array(3, 'live', 'Rick')); この時、無関係な?は置換されないようになってますか? たとえば、クエリの中に、hoge = 'fuga???'があった時など
452 名前:nobodyさん mailto:sage [2008/08/28(木) 22:52:42 ID:???] >>451 ソレは自分で試してみたほうが早いんじゃない?
453 名前:nobodyさん mailto:sage [2008/08/29(金) 08:50:09 ID:???] 複数のコントローラ間でメソッドを共有したいとき、どうするのがいいでしょうか。 できれば、あるコントローラのメソッド内で、別のコントローラをnewしてメソッドを実行できるのがいちばん理想的なんですが、そんなことできますか。
454 名前:nobodyさん mailto:sage [2008/08/29(金) 11:22:01 ID:???] >>453 application/libraryにMY_Controllerを置き、共通メソッドはそこに置く。 そのメソッドを使うコントローラはextends MY_Controllerで作る。
455 名前:nobodyさん mailto:sage [2008/08/29(金) 11:44:55 ID:???] >>454 しかしそれをしていると、だんだん多重継承っぽい事がしたくなってくるという罠 シンプルな処理、Controllerのプロパティ、機能等が必要ない様なものは、 ユーティリティクラスに切り出すとかもありかと思う そして、libraries がカオスになるというセンスのない俺
456 名前:nobodyさん mailto:453 [2008/08/29(金) 14:42:55 ID:???] >>454 MY_Controllerに相当するものは作っているんですが、そこにはやはり多くのコントローラに共通するものだけをおきたいです。 あるコントローラAとコントローラBだけが使うようなものは、やっぱりMY_Controllerにはおきたくないですよね。 class AB_Controller extends MY_Controller class ControllerA extends AB_Controller class ControllerB extends AB_Controller みたいなのってできますっけ? >>455 多重継承やMix-inは欲しくなりますね。 librariesやhelpersがカオスになるのはよくわかります。 今まさにそんなかんじになりつつあるので、整理しているところです。
457 名前:nobodyさん mailto:sage [2008/09/07(日) 15:37:47 ID:???] >>456 びっくりするくらい亀レスですがw > class AB_Controller extends MY_Controller > class ControllerA extends AB_Controller > class ControllerB extends AB_Controller > みたいなのってできますっけ? できますね。うちでは、MY_Controller にはしていませんが。 (この辺のAutoLoderの仕組みがあんまりよくわかってないw)
458 名前:nobodyさん [2008/09/12(金) 18:31:21 ID:q2obqPa7] >457 Fatal error: Class 'AB_Controller' not found in 呼び出してるコントローラーを継承しているクラス.php on line XX ってなるんですが、なぜでしょうか。 以下に配置してます。 /system/application/libraries/AB_Controller.php -------------------------------------------------------- <?php class AB_Controller extends MY_Controller { function AB_Controller() { parent::MY_Controller(); } } ?>
459 名前:nobodyさん mailto:sage [2008/09/13(土) 01:11:52 ID:???] >>458 「MY_がついてて、MY_の後の最初の1文字だけが大文字」の命名ルールに従ってないと オートローディングできないですよ〜。 (プレフィクスはconfig.phpでMY_以外に変更可能) 命名規則を揃えるか、自前でコントローラクラスにrequire_onceを書くか、どっちかの手当てが 必要。
460 名前:nobodyさん [2008/09/14(日) 01:01:21 ID:cUARlcyz] >>459 ありがとうございました。大変助かりました!
461 名前:nobodyさん mailto:sage [2008/09/18(木) 13:09:07 ID:???] CodeIgniter的には、pluginとhelperの違いって何かありますか。 どっちも関数を提供するだけで、違いが内容に見えます。
462 名前:nobodyさん [2008/09/18(木) 16:11:44 ID:nzPLdxkT] ログのしきい値おかしいね。普通 0 出力なし 1 ERROR 2 INFOも 3 DEBUGも じゃない?
463 名前:nobodyさん mailto:sage [2008/09/18(木) 17:07:43 ID:???] syslogの区分けにして欲しいよな ciはアメリカ人らしく独自すぎるところが結構ある
464 名前:nobodyさん [2008/09/18(木) 17:47:47 ID:nzPLdxkT] だよね。 しきい値勝手に変えちゃったもん。
465 名前:nobodyさん mailto:sage [2008/09/22(月) 21:08:37 ID:???] なんかDB使ってるとFromのテーブルがどんどん増えていくんだけれども。 もしかして静的にテーブル溜め込んでんの?
466 名前:nobodyさん mailto:sage [2008/10/08(水) 18:34:20 ID:???] CIでunit testやってる人いません? うちはCIのWikiに出てたSimpletesterをいじりながらなんとかやってますけど、 1フォルダ内のテストクラスを全実行することしか出来なくてちょっとこまってます。 ttp://codeigniter.com/wiki/SimpleTester_-_Unit_testing_library/
467 名前:nobodyさん mailto:sage [2008/10/20(月) 05:19:44 ID:???] base_urlにIndex.phpが引っ付くのはでふぉ?
468 名前:nobodyさん mailto:sage [2008/10/20(月) 05:21:12 ID:???] ちがったform_openだ
469 名前:nobodyさん mailto:sage [2008/10/24(金) 20:58:58 ID:???] 1.7.0
470 名前:nobodyさん mailto:sage [2008/10/28(火) 10:49:17 ID:???] 1.7でなにか変わった?
471 名前:nobodyさん mailto:sage [2008/10/28(火) 14:21:52 ID:???] validationクラスがform_validationクラスに名前変更&若干の仕様変更 →configに定義したものから読み込み可能になった sessionデータをDBに保存するように変更とソレに伴ってテーブル定義変更 この二つ位かな?個人的には 詳しくは codeigniter.com/user_guide/changelog.html
472 名前:470 mailto:sage [2008/10/28(火) 20:20:01 ID:???] なるほど、どもです。
473 名前:nobodyさん mailto:sage [2008/11/12(水) 18:05:07 ID:???] ciってcgi版phpでrewriteを使って www.example.com/index.php/aaa/ を www.example.com/aaa/ でアクセスできるようにすると、動かないのですかね・・・