トップページ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/

小回りの利くフレームワークの話題をひとつ!
0521nobodyさん2009/02/15(日) 20:22:34ID:???
>>520
その「ただのスクリプト」がどう実行されているか、ってのを問題にしてるわけなので。
脊髄反射いくない。
0522nobodyさん2009/02/16(月) 00:01:29ID:???
ユーザガイド見てくるといいと思うよ。
0523nobodyさん2009/02/16(月) 00:31:53ID:???
>>522
ユーザガイドにそんな記述あるの?
ソース見てみたので一応書いてみる。Kohanaだけどw

・標準のviewは CI_Loader::view メソッドで表示処理?
・そこから呼び出される _ci_loadメソッドでob_startされた後
  echo eval( ごにょごにょ file_get_contents(〜〜) )
   もしくは
  include(〜〜)
・んで結果をreturn もしくは $OUT->output()

この仕組みなら、viewファイル内での関数定義は、CI_Lorder::_ci_loadメソッド内で
関数定義するのと同等かな。だから、同じテンプレートを2回読み込むと、多分Fatal Error

どこまでCIの現行バージョンで一緒か知らんし、実際に動かして確認してないので大嘘かも。

また、PHPで関数内で関数が定義できることやその動作については
http://ml.php.gr.jp/pipermail/php-users/2005-June/026279.html ← このツリーを
http://ml.php.gr.jp/pipermail/php-users/2005-June/026322.html ← この辺まで読んで納得。
PHP5でも仕様はこの当時のままっぽい?

以上、適当で嘘くさいので、間違ってたら誰か教えて・・・
0524nobodyさん2009/02/16(月) 13:51:05ID:???
remapに関して質問です。
remapした場合関数の引数に当たる部分はuri->segment以外で
とる方法はないのでしょうか?
サイトに載っている例では
function _remap($method)
{
if ($method == 'some_method')
{
$this->$method();
}
else
{
$this->default_method();
}
}
となっていて、引数部分がありませんよね。
現状switchで$methodの内容からsegmentで値引っ張って回してますが、
もうちょっとスマートな書き方はない物ですかね・・・
0525nobodyさん2009/02/16(月) 14:47:15ID:???
興味ないだろうけどオレ流_remap
function _remap($method)
{
    if (method_exists($this, $method)) {
        call_user_func_array(array(&$this, $method), array_slice($this->uri->rsegments, 2));
    }
    else if (method_exists($this, $method.'_')) {
        call_user_func_array(array(&$this, $method.'_'), array_slice($this->uri->rsegments, 2));
    }
    else {
        call_user_func_array(array(&$this, 'index'), array_slice($this->uri->rsegments, 1));
    }
}

なんでこうなったか忘れたけど、これ書いたとき結構調べたから
$this->uri->からとってくる以外ないと信じたい。
0526nobodyさん2009/02/19(木) 14:54:17ID:???
Kohanaスレないので近縁のこちらで質問させてください。

ファイルアップロードについてなんだが、
コントローラ/モデル/ビュー内で$_FILES受け取れないのは仕様?

◆ちなみにフォームはこんな感じ
<form method="post" action="/admin/update/" enctype="multipart/form-data">
<input type="text" name="name" />
<input type="file" name="photo" />
<input type="submit" name="submit" value="アップロード" />
</form>

◆Controller/admin.phpはこんな感じ
public function update(){
print_r($_POST); // 正常に出力
print_r($_FILES); // 空のArrayが出力される
print_r($_FILES["photo"]); // エラー「Undefined index: photo」
}

Kohanaフォーラムだと$_FILESで動いている投稿はあるんだけどなぁ。
完全手詰まりしてしまった。
05275262009/02/19(木) 15:42:52ID:???
うんこでした。
先ほどペーストしたコードで気づきました。
enctypeの直前スペースが全角でした。
うんこでした。

うんこでした。スレ汚しサーセンorz
0528nobodyさん2009/02/20(金) 14:07:46ID:???
ここでうんこ禁止!

ケツの穴にコルク栓をしておこう^^
0529nobodyさん2009/02/20(金) 15:01:30ID:???
あの、「コードイグニッター」って読んでたんですけど・・・
0530nobodyさん2009/02/20(金) 15:21:31ID:???
>>528
「イグニッション!」(点火!)

シュポーーーン!!
05315282009/02/22(日) 20:33:01ID:???
念のため、元ネタはマカロニほうれん荘です^^
0532nobodyさん2009/02/27(金) 20:37:16ID:???
これってクッキー以外のセッション使うにはどうすればいいの?
ZFのセッションとか使うようにできますか?
0533nobodyさん2009/02/27(金) 20:52:19ID:???
>>532
これ
ttp://codeigniter.com/wiki/Native_session/
使うかZendのセッションライブラリをapplication/librariesにおいて使えばおk
0534nobodyさん2009/02/27(金) 21:05:04ID:???
>>533
迅速なレスありがとうございます!助かりました。
0535nobodyさん2009/03/01(日) 10:39:27ID:???
モデルクラスの命名規則なんですが、コントローラークラスと同じ名前にするとエラーになりますか?

Fatal error: Cannot redeclare class Bbs in /usr/local/www/htdocs/.../system/application/models/bbs.php on line 100
05365352009/03/01(日) 10:40:15ID:???
(例)掲示板のコントローラークラス

<?php
class Bbs extends Controller
{
 //コンストラクタ
 function Bbs()
 {
  parent::Controller();
  $this->load->model('bbs');//bbsのモデル読み込み
 }
 
 //トップページ
 function index()
 {
  echo "bbs menu";
 }
 
 //タイトル表示
 function title()
 {
  echo $this->bbs->get_title();
 }
}
?>
05375352009/03/01(日) 10:41:07ID:???
(例)掲示板のモデルクラス
<?php
class Bbs extends Model
{
 //コンストラクタ
 function Bbs()
 {
  parent::Model();
  $this->load->database();
 }
 
 //タイトル取得
 function get_title()
 {
  $query = $this->db->get('bbs');
  return $query->result_array();
 }
}
?>
05385352009/03/01(日) 10:46:22ID:???
コントローラークラスですでに「Bbs」というクラス名を使用していると、
モデルクラス名として「Bbs」は使えないということでしょうか?
=Bbsというコントローラーの中で、Bbsというモデルを使うことができない?

みなさんは、モデルクラス名を付けるとき、どうしてますか?
=モデルを使うコントローラーのクラス名を重複しないように命名しないとダメなの?

「Bbs_model」とかだと、なんか長ったらしい><
0539【裂く裸ノ雨】初音ミク虐待スレ2009/03/01(日) 10:50:35ID:fSY3QkVN
最近無いのでたてました。
0540nobodyさん2009/03/01(日) 10:51:05ID:???
すまん、誤爆したw
0541nobodyさん2009/03/01(日) 13:57:56ID:???
CodeIgniterちょっと触ってみた。

チュートリアルやったんだけど、この後は何をすべきなんだろうか。
徹底入門って本どう?役に立ちます?
0542nobodyさん2009/03/01(日) 14:09:29ID:???
>>541
掲示板でも作ってみればいいのではないかと。
って10年前から同じ事言われてる様な気もする
0543nobodyさん2009/03/01(日) 20:30:49ID:???
CIもcakeぐらいのフォーラムに成長して欲しいなあ・・・。
0544nobodyさん2009/03/02(月) 00:25:39ID:???
CIでシェルスクリプトを使いたいのだが、どうやればいいのでしょうか。
0545nobodyさん2009/03/02(月) 00:29:17ID:???
>>541
最初はオンラインのリファレンスを見てやってたけど、全体を俯瞰するのにページの切り替えが面倒に感じた
徹底入門はオフラインでどんどん読み進めるので役に立ったよ

最初慣れるまでリファレンスとして首っ引き
ActiveRecordクラスのメソッド名や、よく使うヘルパー関数を覚えたら、あとはほとんど見なくてもアプリを作れるようになった

時給1000円としても3時間分程度のコスト
CIで生産性アップしたらすぐに元は取れるし、本は読み終わったら売り払えばOK
最近買った本の中では元が取れた1冊だったと思います
0546nobodyさん2009/03/02(月) 00:31:56ID:???
徹底入門で物足りないのは、ログイン認証の作り方
あと携帯のセッション管理かな
この二つはネットで検索してフォローしました
(このスレの情報も役に立ちました^^)
0547nobodyさん2009/03/02(月) 00:34:43ID:???
>>541
ちょっとしたWEBアプリを作っているんですが、一緒に作ってみませんか?
=2chの過去ログを保存するWEBアプリです。
DATファイルからHTMLページを作成する機能をこれから作る予定なんですが、良かったらアドバイスとか勉強の材料にでも
0548nobodyさん2009/03/02(月) 09:59:03ID:???
1.7の方がバリデーションとか便利そうだけど、日本語化パックがないのか。

今から始めるなら1.6とどっちがいいですか?
0549nobodyさん2009/03/02(月) 10:55:51ID:???
徹底入門みながら、差分情報をリファレンスで確認しつつ1.7やったよ。
MLの方に 1.7の日本語化パックあったはず。完全じゃなかったとおもうけど
0550nobodyさん2009/03/02(月) 13:52:32ID:???
徹底入門のサンプルアプリの動作確認は、1.6でやりました。
自分のアプリを作るときは1.7でやってます。
0551nobodyさん2009/03/02(月) 17:43:51ID:???
>>547
kwsk
0552nobodyさん2009/03/02(月) 19:18:28ID:???
バージョン1.7.1使ってるんですが、検索結果をページングしたいときって、検索条件はセッションに入れるものなんでしょうか?

0553nobodyさん2009/03/02(月) 22:05:37ID:???
>>551
ttp://www9.atpages.jp/perfume2ch/
05545472009/03/03(火) 13:09:25ID:KbYnBJGq
できた。
週末+αの4日くらいで作れた。
CIは便利!(・∀・)
0555nobodyさん2009/03/03(火) 13:14:37ID:???
>>552
1個だったら、POSTやGET(URLのセグメント)に入れて次ページに持ち越せると思うけど、
条件が複数個ある場合は、セッションに入れて持ち回りするのが楽ですかね?

条件をいったん配列に入れて、シリアライズして、エンコードして、無理矢理POSTやGETに埋め込むということもできるだろうけど、スゴク面倒くさそうです><
0556nobodyさん2009/03/03(火) 14:43:08ID:???
>>555
アドバイスありがとうございます。
検索項目が動的に増える作りなので、セッションにしようと思います。

もうひとつ質問なんですが、セッションの保存先をデータベースにした場合、
セッションテーブル内のデータはどのタイミングで破棄されるのでしょうか?
05575562009/03/03(火) 17:48:35ID:???
ガベージコレクションで自動で消えるんですね。
お騒がせしました。
0558nobodyさん2009/03/03(火) 22:28:40ID:???
検索条件指定画面で生のSQLクエリに近いものをユーザが入力できるようにしたいんですが、
CodeIgniterのActiveRecord使った時に、SQL実行エラーが発生した場合の記述ってどうやるんでしょうか?
直書きのPHPだと以下のような記述ができるみたいなんですが・・・。

if (!$res = mysql_query($sql)) { //エラー処理 }
0559nobodyさん2009/03/04(水) 12:21:43ID:???
>>558
自己レス。
config.phpのdb_debugをFALSEにしたらエラー画面にリダイレクトしなくなりました。
が、エラーログも出力しなくなりました・・・。

運用時はこのDBデバッグ設定はOFFにするのが普通ですか?
0560nobodyさん2009/03/04(水) 18:47:01ID:???
>>558
直前にsimple_query使ってチェックしてみるとか?
でも二回SQL発行しちゃうのは微妙か。
0561nobodyさん2009/03/18(水) 15:42:05ID:0CAtxxAV
1.71使ってるんだけど、以前モデル内のdbメンバってCI_DB_active_recordだったよね?
今ドライバに代わっちゃってるんだけど、俺なんか変なことしちゃってるんかな。
0562nobodyさん2009/03/22(日) 16:03:22ID:???
CI1.6.3に日本語パックを当てて使ってますが、バリデーションを通すと、日本語が文字化けします。
$_POST['name']を直接取得して、EUC-JPからUTF-8に変換すると、ちゃんと表示されます。

レンタルサーバで、標準の文字コードがEUC-JPです。
CIの文字コードはUTF-8を指定しています。

バリデーション以外は、特に文字化けしないんだけど、どうしたらいいでしょうか?
とりあえずなら、表示前にいったん文字コード変換すれば対応できるけど、こんなやり方はスマートじゃないですよね?><
0563nobodyさん2009/03/22(日) 18:38:20ID:???
internal encodingを指定すればいいだけじゃないのか?
0564nobodyさん2009/03/27(金) 21:05:38ID:???
>>563
どうもありがとうございます。

最初、.htaccessファイルをindex.phpがあるpublic_htmlフォルダにだけ置いていました。
CIが入っている別フォルダにも.htaccessを置いたら、文字コードを変えることができました。
まるっと解決!(・∀・)
05655642009/03/27(金) 21:11:08ID:???
あともう一つ文字化けがありました。
CIからお知らせメールを送信するとき、メールのsubjectが文字化けしていた。

.htaccessでinternel_encodingを変更するのは別に、文字コード指定の処理を入れたらメールの文字化けを回避できました。
↓↓↓
PHPのmb_encode_mimeheaderは事前にmb_internal_encodingが必要
http://www.akiyan.com/blog/archives/2006/03/phpmb_encode_mi.html

文字化けはもうイヤ><
0566nobodyさん2009/04/08(水) 08:38:18ID:???
これ使うならちいたんの方がいいよ
0567nobodyさん2009/04/10(金) 02:57:28ID:???
ちいたんも使ってみました
今のところCIに落ち着いてます^^
次はkohanaかな?
0568nobodyさん2009/04/10(金) 07:42:12ID:???
cakeは駄目?
0569nobodyさん2009/04/10(金) 10:10:33ID:???
そこでrhacoですよ
0570nobodyさん2009/04/10(金) 18:15:52ID:???
宣伝うぜーんだが
0571nobodyさん2009/04/10(金) 19:22:00ID:???
cakeはhtaccessが半必須になってるのがネック
趣味PGは無料PHPサーバでサコッとやる派の俺にはCIのほうが向いてる
業務だったらどうなるかは知らん
0572nobodyさん2009/04/10(金) 22:57:20ID:???
cakeが遅すぎてCIに移行を検討中

0573nobodyさん2009/04/11(土) 06:45:27ID:???
CakeはRailsよりも遅い言われているからどれだけ遅いんだよ、という
0574nobodyさん2009/04/11(土) 10:02:49ID:???
素のPHPが一番早い
0575nobodyさん2009/04/11(土) 12:36:26ID:???
CIよりもっと軽いFWってある?
0576nobodyさん2009/04/11(土) 13:00:06ID:???
CI機能少ないのに、これ以上とったら何がのこるんだろ
0577nobodyさん2009/04/11(土) 14:24:33ID:???
ciはアメ公的な変なクセがあるところがイヤーンな感じ
0578nobodyさん2009/04/12(日) 17:02:08ID:???
CIってキャッシュはしょぼいし、
セッションは不評だし、
なんなのこれw
0579nobodyさん2009/04/12(日) 17:04:06ID:???
軽量お手軽フレームワークですが何か
0580nobodyさん2009/04/12(日) 22:51:09ID:???
cakeのデバッグモードみたなのってある?
0581nobodyさん2009/04/13(月) 07:37:14ID:???
デバッグモード(というか出力)は一応ある。

コンストラクタにでも以下を放り込めばいいw
 $this->output->enable_profiler(TRUE);

俺は足りないから出力フックして、print_a(というライブラリがある)とかで任意にデータ構造を出力できるようにしたりしてた。

cakeのは俺は知らんのだけど、期待すると多分…
0582nobodyさん2009/04/13(月) 07:52:00ID:???
enable_profiler(TRUE)にしてるなら、出力したい変数をGETに上書きしとけばいいんじゃね
わざわざprintせんでも
0583nobodyさん2009/04/13(月) 20:15:34ID:???
GETを消すとか余計なことすんなよ。
一番余計なことをするFWはCI。
0584nobodyさん2009/04/15(水) 16:53:53ID:???
CIに不満があるならkohanaを使ってみたらいいよ☆
ドキュメントは英語だけど…(・∀・)
0585nobodyさん2009/04/17(金) 22:01:40ID:???
正直、KohanaとCIの乖離具合が最近気になる。
いや、CIのPHP4対応べったりにぶち切れて、Kohanaをメインに使って見てたんだが。
最近のCIのバージョンアップとか追いかけてないな・・・

なんだかんだ言って、CIの方が継続的に人がついてるわけだしなあ
CIがPHP4を切り捨てる方向性さえ出してくれれば、と切に思う。
0586nobodyさん2009/04/18(土) 12:11:12ID:???
PHPでRoRをやろうとするからだ。
0587nobodyさん2009/04/18(土) 18:39:53ID:???
CakePHPと間違ってるんだろうか
0588nobodyさん2009/04/18(土) 20:36:11ID:zinmsTt6
機能が足りないから、
PEARから追加してるんだけど、
ZFのを追加した方がいいの?
0589nobodyさん2009/04/18(土) 23:45:48ID:???
FWにしては自由すぎだし、足りない機能を付け足したらスピードも他のFWとあまりかわらないし、
何もかも中途半端な感じがする。
0590nobodyさん2009/04/19(日) 00:19:05ID:???
付け足しても他のFWより全然早い。
CIも他のFWも使ったこと無いだろw
0591nobodyさん2009/04/22(水) 01:37:11ID:???
>>588
CIならPEARからでもよさげだけど、KohanaならZFを入れたくなる
気分だ気分
0592nobodyさん2009/04/23(木) 19:07:21ID:???
CodeIgniterのSVNリポジトリをとってきたんですけど、フレームワーク自身のユニットテストが見つかりません。
もしかして開発チームはユニットテストをしていないんでしょうか。
0593nobodyさん2009/04/27(月) 09:06:35ID:???
俺もそれ気になってたわ

そもそも、CodeIgniter周りってテスト技法さっぱりわからん。
CodeIgniter流で言えば他のライブラリと組み合わせて使えということなのかもしれんけど
それにしても標準のユニットテストはオマケだよなw
0594nobodyさん2009/04/27(月) 12:59:04ID:???
ユニットテスト PHP の検索結果 約 120,000 件

ユニットテストって便利なんですか?
変数のプロファイリングは、echoやprint_rで十分なんで、Xdebugとか使ったことないです

PHPUnit3で始めるユニットテスト
http://gihyo.jp/dev/feature/01/php-test
…後で読んでみるか
0595nobodyさん2009/04/27(月) 13:34:31ID:???
おれは業界入りたてただから、どの程度やられてるのか知らん
うちは、TDD(Test Driven Developoment)でテスト書いてから実装してる
0596nobodyさん2009/04/29(水) 12:02:37ID:SeoCUIVm
データベースの接続でdefault以外のDBを
ユーティリティクラスで最適化とかしたいんですがどうしたらいいですか?


上手く言えないですが、

■ config/database.php
$db["default"]["database"] = "test1";
...
$db["my_db"]["database"] = "test2";
...

で、

$my_db = $this->load->database("my_db");

この$my_dbに対して、テーブルの最適化を行いたいです
普通に
$this->load->dbutil();
$this->dbutil->some_function();
だと、$db["default"]の接続設定先となるので困っています
0597nobodyさん2009/04/29(水) 15:24:07ID:???
>>596
単なる思い付きですが、DSN(データベース接続情報)を配列にして、条件によって、$db["default"]["database"]に代入する値を切り替えるという方法では無理でしょうか?

CIじゃないけど、複数のサーバを使用しているとき、サーバによって接続先DB変える方法をやったことがあるので、そのイメージで。
0598nobodyさん2009/05/02(土) 00:31:30ID:???
$this->dbutil->db = $my_db;

でいけるかも
0599nobodyさん2009/05/02(土) 07:49:23ID:???
>>590
小さい案件ばかりでうらやましいですね。
06005962009/05/03(日) 08:43:21ID:???
遅くなりましたが
>>598で出来ました
ありがとうございます!
0601nobodyさん2009/05/13(水) 21:55:40ID:XGYdQTNG
http://www.example.com/test/method/http%3A%2F%2F2ch.net%2Findex.html
とかだと、正しく読み込んでくれず、404エラーが返されるけど、なんで?
0602nobodyさん2009/05/13(水) 23:00:13ID:???
>>601

configファイルの
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
でURLに使用可能な文字が制限されてる

ちなみに俺だったら
$config['uri_protocol'] = "PATH_INFO";
$config['enable_query_strings'] = TRUE;
に設定して、
http://www.example.com/test/?method=http%3A%2F%2F2ch.net%2Findex.html
で対応する
0603nobodyさん2009/05/14(木) 06:49:11ID:???
%2Fが404だから、AllowEncodedSlashes On
Apache使えないサーバはわからんが。
0604nobodyさん2009/05/15(金) 10:24:33ID:???
>595
> テスト書いてから実装
もう何万回説明したか分からんが、それはTDDではなくテストファーストだ。
wikipediaの説明が腐ってるのが定着しない原因かなぁ。

TDDでは、「テストが先にある」わけじゃない。
いや、確かにテストは先にあるんだが、長くとも1分後には対応するコードが存在する状態になっているのがTDD。
TDDでは「テスト記述(=仕様決定)とテスト実行、実装を同時進行で進める」がニュアンスとして正しい。
0605nobodyさん2009/05/15(金) 10:26:37ID:???
じゃあ、「テストファースト」ってのは?
それを書かないとどう違うのか伝わらないと思う。頑張れ
06065952009/05/16(土) 09:15:49ID:???
>>604
角谷氏のプレゼンとか記事とか見てるくらいだから俺は勘違いしているかもしれん。
TDDつーか、BDDなんだが、
考える→テストを書く(失敗)→実装を書く(テストを成功)→リファクタリング→最初に戻る、
という一連のイテレーションじゃないのかな?
なんにしろテストが先だろうと思うけど。

まずテスト書いてから、実装。
もちろん、実装がない状態でテストかけないなら、実装もやらないといけないけど。
0607nobodyさん2009/05/16(土) 11:14:55ID:???
最初に書くテストで仕様が全て表現されているか否か、の差だろ
TDDの場合、最初のテストは明らかに不十分なものから始まる
0608nobodyさん2009/05/31(日) 01:08:41ID:nZt0u9JQ
入力エラーになったテキストフィールドの背景を赤くしたいんだが
どうするのが一番スマート?
0609nobodyさん2009/05/31(日) 08:06:41ID:???
おれだったら普通にHTMLのHEAD内にJavaScript追加する
0610nobodyさん2009/05/31(日) 19:02:52ID:nZt0u9JQ
$this->validation->***_error
の存在チェックしてあるなら、
エラー用のCSSクラスを出力するようにしました。

CodeIgniter標準でやってくれればいいのに。
0611nobodyさん2009/05/31(日) 19:06:33ID:ksNoV5PQ
>610
そのくらいヘルパ関数作れと
0612nobodyさん2009/05/31(日) 19:10:56ID:nZt0u9JQ
>611
誰にいってる?
0613nobodyさん2009/05/31(日) 21:11:42ID:???
>>612
誰にいってる?
0614nobodyさん2009/06/01(月) 18:06:37ID:???
>>613
誰にいってる?
0615nobodyさん2009/06/01(月) 19:16:43ID:VRCsDIyG
>>614
誰ににている?
0616nobodyさん2009/06/06(土) 10:46:42ID:???
>>615
きみのすがたは誰ににている?
0617nobodyさん2009/06/06(土) 12:50:27ID:/u9OVmVh
>>616
いや、それはないよ
0618nobodyさん2009/06/09(火) 13:43:10ID:???
URIでコントローラファイルやメソッドを指定しても実効されないです(404)。

↓こいつで指定されているやつは実行されるんですけど・・・。
system/application/config/routes.php。

config.phpの設定が何か足りないんだろうか。
0619nobodyさん2009/06/09(火) 13:54:32ID:???
なんかmod_rewriteがうまく動いていないんじゃないかという気がしてきました。
/hoge/index.php/コントローラ
だと動くんですよね。
0620nobodyさん2009/06/09(火) 14:00:23ID:???
>>619
設置鯖はsakuraかxserverか?
CGI版PHPを使ってるならphp.iniでfixpathinfoを有効にしないとだめかも。
もしDSO版PHPでダメなんだったら、.htaccessの記述ミスの可能性大。
■ このスレッドは過去ログ倉庫に格納されています