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

小回りの利くフレームワークの話題をひとつ!
0441nobodyさん2008/08/20(水) 20:18:05ID:???
CI使ってる人間ってどれぐらいいるんだろうか
0442nobodyさん2008/08/20(水) 20:44:32ID:???
17人
0443nobodyさん2008/08/22(金) 13:30:33ID:???
CIってforward とか redirect とかはどうやるの?
0444nobodyさん2008/08/23(土) 00:51:34ID:???
headerで自分で
0445nobodyさん2008/08/23(土) 01:26:31ID:???
helperとか無かったっけ
まあぶっちゃけ自分でheader(ほげほげ)書くのと変わらないけど
0446nobodyさん2008/08/25(月) 13:31:03ID:Ziu2Tqsv
CodeIgniterでは、URLは「コントローラ名/メソッド名」というのが基本ですが、
このパターンを変更することはできますか。

やりたいのは、
- /blog/index
- /blog/show
- /blog/create
- /blog/edit
というのではなく、
- /blog/maka
- /blog/blackstar
- /blog/deaththekid
のように「コントローラ名/ユーザ名」のようにしたいということです。
つまり /blog 以下のアクセスをある特定のメソッドに縛りたいということです。
0447nobodyさん2008/08/25(月) 15:36:16ID:???
>>446
ヒント
config/routes.php
http://codeigniter.com/user_guide/general/routing.html
http://userguide.cilab.info/general/routing.html
0448nobodyさん2008/08/26(火) 15:08:09ID:???
>>447
ありがとうございます!
0449nobodyさん2008/08/26(火) 15:24:29ID:???
Routingについて質問です。
ユーザーズガイドの例にあったのですが、
$route['product/:num'] = "catalog/product_lookup";
という設定をした場合、「:num」の値は Catalog->product_lookup() の中で
どうやって取得すればいいのでしょうか。
通常だと Catalog->product_lookup() の引数にこの値が渡されますが、
試したところ、$route[] を設定した場合は渡されないようです。
0450nobodyさん2008/08/26(火) 15:37:11ID:???
>>449
英語のドキュメントに書いてありました。
$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";
でいいみたいですね。
お騒がせしました。
0451nobodyさん2008/08/28(木) 12:20:46ID:B/844Qiw
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));

この時、無関係な?は置換されないようになってますか?
たとえば、クエリの中に、hoge = 'fuga???'があった時など
0452nobodyさん2008/08/28(木) 22:52:42ID:???
>>451
ソレは自分で試してみたほうが早いんじゃない?
0453nobodyさん2008/08/29(金) 08:50:09ID:???
複数のコントローラ間でメソッドを共有したいとき、どうするのがいいでしょうか。
できれば、あるコントローラのメソッド内で、別のコントローラをnewしてメソッドを実行できるのがいちばん理想的なんですが、そんなことできますか。
0454nobodyさん2008/08/29(金) 11:22:01ID:???
>>453
application/libraryにMY_Controllerを置き、共通メソッドはそこに置く。
そのメソッドを使うコントローラはextends MY_Controllerで作る。
0455nobodyさん2008/08/29(金) 11:44:55ID:???
>>454
しかしそれをしていると、だんだん多重継承っぽい事がしたくなってくるという罠

シンプルな処理、Controllerのプロパティ、機能等が必要ない様なものは、
ユーティリティクラスに切り出すとかもありかと思う

そして、libraries がカオスになるというセンスのない俺
0456nobodyさん2008/08/29(金) 14:42:55ID:???
>>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がカオスになるのはよくわかります。
今まさにそんなかんじになりつつあるので、整理しているところです。
0457nobodyさん2008/09/07(日) 15:37:47ID:???
>>456
びっくりするくらい亀レスですがw

> class AB_Controller extends MY_Controller
> class ControllerA extends AB_Controller
> class ControllerB extends AB_Controller
> みたいなのってできますっけ?

できますね。うちでは、MY_Controller にはしていませんが。
(この辺のAutoLoderの仕組みがあんまりよくわかってないw)
0458nobodyさん2008/09/12(金) 18:31:21ID: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();
}
}
?>
0459nobodyさん2008/09/13(土) 01:11:52ID:???
>>458
「MY_がついてて、MY_の後の最初の1文字だけが大文字」の命名ルールに従ってないと
オートローディングできないですよ〜。
(プレフィクスはconfig.phpでMY_以外に変更可能)

命名規則を揃えるか、自前でコントローラクラスにrequire_onceを書くか、どっちかの手当てが
必要。
0460nobodyさん2008/09/14(日) 01:01:21ID:cUARlcyz
>>459
ありがとうございました。大変助かりました!
0461nobodyさん2008/09/18(木) 13:09:07ID:???
CodeIgniter的には、pluginとhelperの違いって何かありますか。
どっちも関数を提供するだけで、違いが内容に見えます。
0462nobodyさん2008/09/18(木) 16:11:44ID:nzPLdxkT
ログのしきい値おかしいね。普通
0 出力なし
1 ERROR
2 INFOも
3 DEBUGも
じゃない?
0463nobodyさん2008/09/18(木) 17:07:43ID:???
syslogの区分けにして欲しいよな
ciはアメリカ人らしく独自すぎるところが結構ある
0464nobodyさん2008/09/18(木) 17:47:47ID:nzPLdxkT
だよね。
しきい値勝手に変えちゃったもん。
0465nobodyさん2008/09/22(月) 21:08:37ID:???
なんかDB使ってるとFromのテーブルがどんどん増えていくんだけれども。
もしかして静的にテーブル溜め込んでんの?
0466nobodyさん2008/10/08(水) 18:34:20ID:???
CIでunit testやってる人いません?

うちはCIのWikiに出てたSimpletesterをいじりながらなんとかやってますけど、
1フォルダ内のテストクラスを全実行することしか出来なくてちょっとこまってます。
ttp://codeigniter.com/wiki/SimpleTester_-_Unit_testing_library/
0467nobodyさん2008/10/20(月) 05:19:44ID:???
base_urlにIndex.phpが引っ付くのはでふぉ?
0468nobodyさん2008/10/20(月) 05:21:12ID:???
ちがったform_openだ
0469nobodyさん2008/10/24(金) 20:58:58ID:???
1.7.0
0470nobodyさん2008/10/28(火) 10:49:17ID:???
1.7でなにか変わった?
0471nobodyさん2008/10/28(火) 14:21:52ID:???
validationクラスがform_validationクラスに名前変更&若干の仕様変更
→configに定義したものから読み込み可能になった

sessionデータをDBに保存するように変更とソレに伴ってテーブル定義変更

この二つ位かな?個人的には

詳しくは
http://codeigniter.com/user_guide/changelog.html
04724702008/10/28(火) 20:20:01ID:???
なるほど、どもです。
0473nobodyさん2008/11/12(水) 18:05:07ID:???
ciってcgi版phpでrewriteを使って
http://www.example.com/index.php/aaa/

http://www.example.com/aaa/
でアクセスできるようにすると、動かないのですかね・・・
0474nobodyさん2008/11/30(日) 21:27:31ID:???
PHP5.0+MySQL4.0で、CI1.6.3だとDBのエラーが出ますね。
>クライアント接続文字エンコードを設定できませんでした

検索したら対策がヒット
ttp://manno.jugem.jp/?eid=500
system/database/DB_driver.php の 178〜188 をコメントアウト(強引にTRUEを返す)したらとりあえず動いた。

ttp://blog.livedoor.jp/dango22/archives/51056076.html
/system/database/DB_driver.php // 178行目からコメントアウト

CodeIgniter入門6章の機能拡張の方法のように、元のファイルを変更しないで、自分で別ファイルを用意して、
/system/database/DB_driver.phpを継承する方法で対応できないでしょうか?

用意されたDBがMySQL4.0で変更できないので、とりあえずこの方法で乗り切る予定ですが^^
0475nobodyさん2008/11/30(日) 21:35:36ID:???
呼び出されたコントローラーとメソッド名取得することって出来ませんかね。
0476nobodyさん2008/12/01(月) 13:31:05ID:4yAH9v9b
>>475
URIクラスを使えばOK?
http://codeigniter.jp/user_guide_ja/libraries/uri.html

URIセグメントの文字列は、URIクラスにより配列にセットされます。
segment_array()メソッドを使うことで、この配列にアクセスできます。
0477nobodyさん2008/12/09(火) 14:53:50ID:3E19WexF
Rapyd使っている人いる?
貧弱なCRUDを補おうと思って使ってみようとしたんだけど、
公式ページのdocumentaionみても全然情報がなくて困ってる・・・

Rapyd: Minimalistic, Open source, Secure, and Small PHP 5 Framework
http://www.rapyd.com/
0478nobodyさん2008/12/17(水) 20:08:15ID:???
>>475
いまさらだが

$this->CI =& get_instance();
$this->CI ->router->fetch_class();
$this->CI ->router->fetch_method();
でもできるみたい。

コントローラやモデル内なら
$this->router->fetch_class();
でアクセス可
0479nobodyさん2008/12/19(金) 18:01:27ID:egThtXwj
みなさんログイン認証は何つかってますか?
>>10にある、UserAuth?
それとも、FreakAuth_lightでしょうか?
simpleloginはさすがに機能がなさ過ぎる感・・・
0480nobodyさん2008/12/19(金) 19:09:31ID:???
>>479
自前です。MY_Contoroller作る方法で。
0481nobodyさん2008/12/19(金) 20:16:08ID:f2L1j1eM
>>480
同じく。それが安心だね。掛け忘れもおきないし。
0482nobodyさん2008/12/20(土) 23:58:43ID:???
>>479
私も最近、ログイン認証のやり方をどうしたらいいか悩みました。

(1)CodeIgniter徹底入門で紹介されていたsimplelogin
(2)もうちょっと高機能なFreakAuth等のライブラリ
(3)自作のMY_Controllerクラスの用意

(2)はまだ試してないけど、今のところ(3)でやってます。

<参考になったサイト>

* LinuxなWEBデザイナーの覚書き。 | CodeIgniterでユーザー認証
http://php-sql-gdgd.jugem.jp/?eid=56
(↑if($this->session->userdata('next'))は、if(!〜)の間違いかな?)

* CodeIgniterで管理ページを作成する
http://dxd8.com/archives/142/

* 日本CodeIgniterユーザ会 - シンプルな認証
http://codeigniter.jp/archives/92

* CI:ユーザー認証
http://o2studio.blog81.fc2.com/blog-entry-306.html
0483nobodyさん2008/12/22(月) 20:02:23ID:???
みなさんありがとう。
MY_Controllerでログイン処理を自前実装?ということでしょうか?

私はリマインダーとかアカウント管理画面を1からは作るの面倒だなーと思ったので、
(というか今の案件で時間がないw)
はてなダイアリーで FreakAuth_light を入れてみた人のを参考にして、
それを試してみています。
0484nobodyさん2008/12/22(月) 22:43:33ID:???
ログイン認証のライブラリについてですが、
CIのMLで紹介されていたDX Authは、今度試してみたいです^^
http://dexcell.shinsengumiteam.com/dx_auth/
0485nobodyさん2008/12/23(火) 14:50:17ID:???
>>484
CL_Authの派生版なんですね。

FreakAuth_light 入れようとしたら、結局 1.7.0 だと改造必要なので困ってしまいました。
DX Auth は1.7.0対応してるみたいなのでよいですね。
0486nobodyさん2008/12/23(火) 19:30:01ID:???
Using Zend_Acl with CodeIgniter

ttp://devzone.zend.com/article/4115-Using-Zend_Acl-with-CodeIgniter
0487nobodyさん2008/12/26(金) 06:39:47ID:???
簡単な認証なら自作した方が早いよ。
0488nobodyさん2008/12/29(月) 00:23:40ID:???
1.7のドキュメント日本語化、がんばってください。
他力本願で申し訳ないけど、早く日本語で読みたいw
翻訳作業に限らず、ユーザ会の皆さんには本当に感謝!
0489nobodyさん2008/12/29(月) 01:22:24ID:???
口語訳→ 「ドキュメントマダー? 俺のためにみんな頑張れ」
04904882008/12/29(月) 12:21:19ID:L94/Z1Ym
>>489
はい、そのとーりですw
100点!
0491nobodyさん2008/12/29(月) 15:23:16ID:???
英語できないなら冗談抜きでプログラマにならないほうがいいと思うよ。
0492nobodyさん2008/12/29(月) 20:26:52ID:???
まず先にver1.6.3の日本語ドキュメントを読んでおけば、
そのあと英語のドキュメントを読んでも理解しやすいよね?

CodeIgniterと英語の勉強になれば一石二鳥だ!
0493みなさん来年も良いお年を!2008/12/29(月) 20:31:46ID:???
翻訳してくれた方々には感謝してます。
おかげでCodeIgniterの学習コストが少しで済んだ。
本も買って、何度も読み返している。

WEBアプリを作るのが楽しいと思える今日この頃。
今もプログラミングしてるし。^^
CodeIgniter日本語版のおかげで、デスマの日々を過ごしたトラウマから立ち直れそうです。(・∀・)
0494nobodyさん2009/01/15(木) 21:00:02ID:???
web関係やったことなかた、俺には本は正直かなりよかった。
願わくば 1.7 の差分を公開を!
今は、Form ValidationやDBのセッション使うみたいだしね
0495nobodyさん2009/01/15(木) 21:02:33ID:???
Form Validationの質問を1つしていいですか?
Validation後の値をとるときってどうすればいいんですかね?
DX_authとか見てるとプログラム中で(controller/auth.phpとかで)
set_value() 使っているんだけど、メソッド名的になんか変なんですが、こんなもんでしょうか?

フォーラムとか見ると、
 $this->input->post('mage');
使えってあったけど、これって直接入れた値なんじゃないのかな?不安なんですが・・
0496nobodyさん2009/01/15(木) 22:08:30ID:???
Validationは基本的に正しい値かどうかをチェックする機能だから、データの修正は別に行うものだと思いますよ。
0497nobodyさん2009/01/15(木) 22:25:21ID:???
>>495
たぶん、サニタイズ?とごっちゃになってるんだろうなー
というか、入力データをとりあえず変換するっていう発想はなかなかなくならないのな。

実際、入力値を変換するっていう処理が本当に必要なのは文字コードの変換くらいだろうと
思うんだが・・・
どうも質問で想定されてるのが、例えば数字・記号の全角半角変換や検索キーワードの
平仮名←→カタカナ変換等の親切処理とか、メール送信等を考えての半角カナ・機種依存
文字や絵文字などを置換・削除する処理などではない雰囲気なのが、なんだかなあ
0498nobodyさん2009/01/15(木) 22:45:47ID:???
>>495
form_validation->run実行してtrueだったらvalidationを通った値ということなので、そのまま$this->input->post使えばいいと思うよ。
それでも心配なら自分でコード書いてテストすればよろし。

という話だと解釈したんだが間違ってたらすまん。
04994952009/01/18(日) 15:11:26ID:???
あああ、そうか理解した。

Validateつまり検証するだけだから、検証にパス(runでTRUEが返る)したら、
その時点でOKだから、input->post使えばいいのか。
修正とか変換するわけではないのね・・・。

set_value() はviewのformに前の入力値をデフォルト表示するためのものだから、
そう使うべきのもの。
0500nobodyさん2009/01/19(月) 18:08:58ID:???
>>499
でもよい子のみんなは、"出力の時"には変換しようね!
お兄さんとの約束だ!
0501nobodyさん2009/01/19(月) 21:52:16ID:???
>>600
いやあ、指南役のお兄さん頼もしいわ。
ほれた
0502nobodyさん2009/01/20(火) 14:45:10ID:???
Active Recordについて少し質問です。

updateメソッドを、事前のwhereなしで呼ぶとテーブル内のデータを全部更新してしまって、
アボンしますよね?
これ、よくやらかしてしまうのですが、よい回避方法ないでしょうか?

マニュアル見ると、
 $this->db->update('mytable', $data, "id = 4");
みたいに、引数でwhereを追加するように決めてしまえばいいのですが、
うっかり引数を省略すると、アボンしてしまいます。

引数省略しないようないい方法ないですかね?
0503nobodyさん2009/01/20(火) 18:20:44ID:???
まじすか
0504nobodyさん2009/01/20(火) 19:23:54ID:???
>>502
ActiveRecordの使い方としてそれはどうなんだ
find()で取ってきたものをupdate()なら、そうはならんのでは?
と、CIを使ったことのない俺が書いてみる
05055022009/01/21(水) 10:29:58ID:???
>>504
私の場合、すでにあったら上書き、なかったらinsertという風な処理を書いていたのですが、
たまに、insert()をupdate()に置き換えただけで実行してしまい、テーブルごとアボンしてしまうのです。

まあ、アフォといえばアフォなのですがw

普通は >>504の意図するように、get_where()->result(); なりしてupdateしたいidを得て、
そのidをupdateにつっこむもんですよね・・・。
0506nobodyさん2009/01/21(水) 23:55:24ID:???
ciのActiveRecordって、save()でidがあればupdate, なければinsertって判断しないのか・・・
リファレンス見たけど、SQLが透けて見えそうな薄い実装だね。だから速いんだろうけど。

>>502
常にwhere()呼んだら駄目か?insert()なら無視してくれない?
すごく間抜けに見えるだろうけど。

あるいは、ラッパーかぶせてidを指定しないupdate()を隠すとか。
もしくは配列からidをとって勝手にwhereに入れるupdate()ラッパーを書くとか。
0507nobodyさん2009/02/02(月) 17:00:10ID:???
1.7ドキュメントの翻訳作業が進んでいるみたいですね。
http://lists.sourceforge.jp/mailman/archives/codeigniter-users/2009-February/001699.html

俺も手伝いたいんだが、こういのっていきなり着手しちゃっていいもんなのかな?
皆さんの訳がとても上手いので、なんか気が引けてしまう。
0508nobodyさん2009/02/03(火) 00:20:37ID:U0x1Z73i
おっと、ちいたんの悪口はそこまでだ。
0509nobodyさん2009/02/03(火) 01:44:51ID:???
>>507
翻訳してる人乙です。
俺もちょっとくらいオープンソースに関わってみたいな…なんて思ってる^^
0510nobodyさん2009/02/11(水) 12:25:10ID:???
1.7.1
0511nobodyさん2009/02/11(水) 13:34:24ID:632VXucI
sessionで簡単なユーザ認証を作ってるんですが
最後ログアウト時に
$this->session->sess_destroy();
でセッションを破棄してるんですが
ブラウザの戻るボタンを押すと
破棄する前のページが表示されてしまいます。
読み込み直すと会員ページは表示されずキチンと動作します。
戻るボタンを押しても会員ページが表示されないようにするには
どうしたらいいですか?
すいませんがアドバイスよろしくお願いします。
0512nobodyさん2009/02/11(水) 13:41:31ID:???
>>511
デフォ(コントローラのコンストラクタ等)でno-cacheにしとくのではだめなん?
0513nobodyさん2009/02/11(水) 14:15:46ID:???
>>512
アドバイスありがとうございます。
デフォというのは
$this->output->set_header();で設定するという事ですかね。
今からマニュアル見てやってみます!
0514nobodyさん2009/02/12(木) 20:18:30ID:RECSJFEg
ちょいとお聞きしたいのですが、view内で冗長性のある部分を関数化しているのですが、
関数 (function)を定義した中だと、viewに渡した変数が使えません orz

例えば、
controller側:
$this->data["hage"] = "mage";
$this->header = $this->load->view('hoge_view', $this->data, TRUE);

view側:
function show_mage($title)
{
 echo "<h1>$title<h1>";
 echo $mage; // エラー:Undefined variaぶる
}

show_mage("mage 1");
show_mage("mage 2");
show_mage("mage special");


view内ではfunctionは使わないものなのでしょうか?

HTMLが絡む表示部分はなるべくcontroller じゃなくて、view側に入れたいので、
view側で処理したいものなのですが・・・
0515nobodyさん2009/02/12(木) 21:08:20ID:???
>>514
CIだとかフレームワークだとか言う以前の問題として、少なくともPHPの基本を覚えるべきかと。
○ show_mage 内の $mage ってどこから出てきたのでしょうか。
○ ↑が $hage のタイポとして、関数内から外部の変数をそのまま参照することはできません。

CIのviewをデフォルトで使ったことが無いので確実ではないですが、show_mage関数内で
   global $hage;
とかやってみてはどうでしょうか。

あと、viewファイル内で関数を定義するというのも、それがview関連処理だったとしても、
コーディングとしてどうかと思います。まあこれは異論もあるかもですが。
view ヘルパーや部分テンプレートとして切り出すことも可能な場合も多いかと。
05165142009/02/12(木) 23:38:27ID:???
>>515
ごめん。最小限のコードに直して書こうとしてtypoした。

$mageでなく、$hageです。
globalではダメでした。
view内functionの扱いはどうなってるんだろ?グローバル関数になるんだろうか。

> あと、viewファイル内で関数を定義するというのも、それがview関連処理だったとしても、
> コーディングとしてどうかと思います。まあこれは異論もあるかもですが。

そんなもんなんでしょうか?MVCフレームワークは不慣れな門で・・・
viewは見栄えを定義するもんだと思ってました。
viewは変数付きHTMLにちかく、ロジックが含まれるなら
ヘルパーとかのライブラリ側や別のテンプレートにもっていく、ということなんでしょうか?
というか、CodeIgniterというよりもMVC一般論の話になりますね
0517nobodyさん2009/02/13(金) 00:25:52ID:???
別にviewにfunction置いても良いと思うけど、viewの可読性を落とさないためにhelperがあるんだから、
使えるならhelper定義すればいい。
その場限りならviewでも良いんじゃないの?

$hogeはshow_mage($title, $hoge)って引数に渡さないと駄目だろ。
functionが呼び出された時点でスコープが変わるんだから。他所のローカル変数は見えない。


話は変わるけど、誰かODBCの設定database.phpにどう書くか教えてくれない?
05185142009/02/14(土) 14:38:53ID:???
>>517
ありがとう。とりあえずは引数に渡していけました。
helperも使ってみます。
0519nobodyさん2009/02/15(日) 14:39:09ID:???
>>516
viewファイルで関数定義ってことは、結局クラスメソッド内で関数定義するのと同じ、なのかな

class Hoge
{
function say()
{
echo "hoge\n";
function say_page()
{
echo "page\n";
}
say_page();
}
}

$c = new Hoge();
$c->say(); #=> "hoge\npage\n"
say_page(); #=> "page\n"

say(); #=> (Fatal error)


なにこのPHPの仕様。関数の中で関数を定義するとグローバル関数になるのかな?
まあ名前がかぶったらFatal errorになるだろうけど、気持ち悪いのでできるだけviewで
ごにょごにょしない方がいいような。

だれか詳しい人解説してくれないかな・・・
0520nobodyさん2009/02/15(日) 19:37:53ID:???
viewがクラスだと思ってないか?ありゃただのスクリプトだ。
JSPやASPみたいにクラス定義と一体化してるわけじゃない。
PHPではclassと明示しない限り、上から順番に処理される。関数はクラス内ならメソッド、そうでなきゃグローバル。
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ちょっと触ってみた。

チュートリアルやったんだけど、この後は何をすべきなんだろうか。
徹底入門って本どう?役に立ちます?
■ このスレッドは過去ログ倉庫に格納されています