[PHP][フレームワーク]CodeIgniterスレ
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/04/27(金) 23:17:16ID:???チュートリアル:http://codeigniter.com/tutorials/
ユーザガイド日本語訳:http://ci-user-guide-ja.nought-point-999.net/
小回りの利くフレームワークの話題をひとつ!
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:???CIそのものが簡単ということなのかな。
0405nobodyさん
2008/06/24(火) 05:50:32ID:???標準の処理と同じコンテクストで処理するのが自然なんだから
エラー用のクラス名とメソッド名だけ指定するようにするべきだろJK
しかもビューチフルにハックもしにくいし
所詮ハゲが書いたFWか・・
0406nobodyさん
2008/06/26(木) 00:50:52ID:???0407nobodyさん
2008/06/26(木) 00:55:50ID:???アメ公の美意識の低さは異常
0408nobodyさん
2008/07/01(火) 04:00:36ID:???0409nobodyさん
2008/07/02(水) 18:00:54ID:???DBオブジェクトが取れてないようなんだけど、取れてない部分のエラーが出てこないのはなんで?
0410nobodyさん
2008/07/02(水) 18:12:41ID:???でもエラーが出ないのはうんこだろ。
0411nobodyさん
2008/07/03(木) 10:15:29ID:XZ5SMLTkどうすればいいんでしょうか?
0412nobodyさん
2008/07/03(木) 17:29:46ID:EmmaV8CTcontroller/admin 掘って そこにコントローラ置いて
あとは admin にルーティングすればいいのかな?
ログイン認証なんかのコントローラとか どうやってわけるのがいいんだろう…
0413nobodyさん
2008/07/03(木) 17:40:04ID:???ぶっちゃけ、どんなURLにしたいかで変わる様な気がする
別ドメインがよければ、Apacheの設定も絡むし。
一般的なのはどんな感じなんだろうねえ
0414412
2008/07/03(木) 17:54:55ID:???ありがとう そだね
とりあえずは controller/admin/ にディレクトリ掘って
そこに置くことにした
あと 管理者関連のコントローラだけ 共通の認証チェック処理いれたいんだけど
その辺のやり方がわからない
前にCakePHPさわったときは beforeFilter なんかで
コントローラ共通の処理入れられたんだけど
CIは 自分でControllerクラス継承して 作らないとだめなのかな?
管理ページ周りの処理で 参考になるとこあったら教えてください…
0415412
2008/07/03(木) 18:02:00ID:???>>411 の言ってることと同じだね
一応 コアクラスの継承は
system/application/library/ に Controllerクラスを継承したMY_Controller.php
とか作ればいいみたいだよ
ログイン認証の共通処理も そうやってAppController 作ればいいんかな…
その辺りの情報がないから どうやるのがいいのか
いまいちわからん
0416nobodyさん
2008/07/03(木) 18:06:26ID:???CIさわらずにKohana触ってる邪道な俺だけど、俺も知りたい
便乗w
俺は、libraries の中にBaseController, UserController, AdminController って作っちゃったな・・・
誰か、筋の良いやり方を教えて
0417412
2008/07/03(木) 18:12:02ID:???ちょいウソあったw
AppControllerじゃなくて MY_Controller だね
/system/application/library/MY_Controller.php
class MY_Controller extends Controller {
function MY_Controller() {
parent::Controller();
}
}
こんな感じ。
ログインの共通処理も ここでやろうかと思ったんだけど
それでいいのかがわからん…
>>416 みたいに 種類ごとにクラス作ったほうがいい気もするし…
0418412
2008/07/03(木) 18:52:48ID:???/system/application/libraries/MY_Controller.php
のようなの作れば コアクラスは自動で置き換わるらしいんだが
置き換わらないな
コントローラ側で
class bbs extends MY_Controller {
}
みたいに MY_ つけてやらないとダメ
CIのルールだとデフォでMY_付けることになってるけど
これじゃ意味ないじゃん
バグ?
0419nobodyさん
2008/07/03(木) 18:57:59ID:???class TEST_Controller extends Controller {
}
[/system/application/controllers/test.php]
class Bbs extends TEST_Controller {
}
にしてもいけちゃう
class Bbs extends Controller {
}
だと TEST_Controller が継承されない
(ルール通りにクラス名を MY_Controller にしても場合も同じ)
コアクラス、置き換わってない…
バグくさいね orz
0420412
2008/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系もだめぽでした。
0423412
2008/07/03(木) 22:43:11ID:???>>419-420 の方法じゃだめなの?
クラス名 MY_ つけなくてもいけるっぽいから
AppControllerにしとけばいいんじゃ
よくわからん ルールだなあ
おれはてっきり Controller そのものを置き換えてくれるとおもったんだが
ライブラリとかヘルパはそうだよね
0424nobodyさん
2008/07/04(金) 15:09:16ID:???コントローラはMY_Controllerをextendsして書いてるが、
モデルは仕方ないので各モデルの冒頭で
<?php
require_once(APPPATH."libraries/MY_Model.php");
class Hoge_model extends MY_Model
0425nobodyさん
2008/07/14(月) 11:55:08ID:???$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:???Database に、escapeしないでsetする方法ってあったっけ?
それがsetメソッドなら、
$db->エスケープしないset('create_at', '式');
$db->insert('テーブル名') でいけるような気がする。
以上想像。なければ、Databaseを拡張する必要があるかも?
俺もこの辺知りたい。ソース嫁って感じだけど
0427nobodyさん
2008/07/14(月) 12:12:17ID:???date('Y-m-d H:i:s') にするしかないと思う
オレは
function now()
{
return date('Y-m-d H:i:s');
}
っていう関数を作ってある
0428nobodyさん
2008/07/14(月) 19:00:27ID:???さんくすです。
できないみたいなので、
fuction current_timestamp() {
return date('Y-m-d H:i:s');
}
を使うことにしました。
でもこれだと、application server と database server が別だと
時刻を必ず揃えておく必要がありますね。
0429nobodyさん
2008/07/14(月) 19:12:37ID:???サーバの管理がきっちり出来ていれば、どんなサーバも1秒と違わないはずなので、時刻で
よっぽどシビアなソートやチェックをしていない限り、それは大丈夫かと。
また、原則からいうなら元々どちらかに合わせるべきなので、DBの関数が使えない時点で
application側の時刻のみを使うのが必然となるかな。
サーバ間の時刻あわせとは、微妙に話が違うような。
0430nobodyさん
2008/07/14(月) 19:47:05ID:???date_helperのunix_to_human じゃダメなのか?
unix_to_human(time(),TRUE,'eu');
0431nobodyさん
2008/07/15(火) 06:26:58ID:???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:???なんちゅうか、バッドノウハウの香りがw
> gettype で 'string' でも 'boolean' でもNULL でもない値はスルーしてくれる
っていう実装自体も、それに依存してるっていうのも、なんだかなあw
オブジェクトを渡されて、上記みたいにすることも前提にしてるのかな?>CI
(それなら、素直にescapeを回避するset系メソッドをつければいいのではと)
0433431
2008/07/15(火) 12:59:01ID:???どうみてもBKです。本当に(ry
CI内部の実装依存だからCIをバージョンアップすると動かなくなるかも。
個人的には、gettypeを見て判定、の部分はとりたてておかしなコードでは
ないので、マイナーバージョンアップであれば大丈夫だろうという甘い期待w
最悪、mark_as_safe で grep して置き換えれば、なんとかなるだろうとかw
素人にも玄人にもオヌヌメできない。\(^o^)/
0434431
2008/07/15(火) 13:07:49ID:???第三引数があるじゃねーかw
$this->db->set('created_at', 'NOW()', FALSE);
で多分いけるね・・・ orz
0435nobodyさん
2008/07/15(火) 13:10:36ID:???でもそれだと
$this->db->insert('tablename', array('created_at'=>'NOW()'));
とかができないよね。
431の方法のほうが個人的に好み。
0436nobodyさん
2008/07/15(火) 13:15:25ID:???created_atに作成日時をつっこみ、$this->db->update($tablename, $valuearray);時はupdated_atに
更新日時を突っ込むようにCI_DBを変更して使ってる。
バッドノウハウなのは百も承知だが、symfonyから流れてきた人にはこれが手放せないのよorz
0437nobodyさん
2008/07/15(火) 17:00:08ID:???それはDBのNOW()やCURRENT_TIMESTAMP()を使うの?
それともPHPのdate()を使うの?
前者ならまねしたいなあ
0438nobodyさん
2008/08/02(土) 09:47:59ID:???なんかかわったの?
0439nobodyさん
2008/08/03(日) 18:45:02ID:znW3bDml0440nobodyさん
2008/08/03(日) 19:04:30ID:???0441nobodyさん
2008/08/20(水) 20:18:05ID:???0442nobodyさん
2008/08/20(水) 20:44:32ID:???0443nobodyさん
2008/08/22(金) 13:30:33ID:???0444nobodyさん
2008/08/23(土) 00:51:34ID:???0445nobodyさん
2008/08/23(土) 01:26:31ID:???まあぶっちゃけ自分でheader(ほげほげ)書くのと変わらないけど
0446nobodyさん
2008/08/25(月) 13:31:03ID:Ziu2Tqsvこのパターンを変更することはできますか。
やりたいのは、
- /blog/index
- /blog/show
- /blog/create
- /blog/edit
というのではなく、
- /blog/maka
- /blog/blackstar
- /blog/deaththekid
のように「コントローラ名/ユーザ名」のようにしたいということです。
つまり /blog 以下のアクセスをある特定のメソッドに縛りたいということです。
0447nobodyさん
2008/08/25(月) 15:36:16ID:???ヒント
config/routes.php
http://codeigniter.com/user_guide/general/routing.html
http://userguide.cilab.info/general/routing.html
0449nobodyさん
2008/08/26(火) 15:24:29ID:???ユーザーズガイドの例にあったのですが、
$route['product/:num'] = "catalog/product_lookup";
という設定をした場合、「:num」の値は Catalog->product_lookup() の中で
どうやって取得すればいいのでしょうか。
通常だと Catalog->product_lookup() の引数にこの値が渡されますが、
試したところ、$route[] を設定した場合は渡されないようです。
0450nobodyさん
2008/08/26(火) 15:37:11ID:???英語のドキュメントに書いてありました。
$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";
でいいみたいですね。
お騒がせしました。
0451nobodyさん
2008/08/28(木) 12:20:46ID:B/844Qiw$this->db->query($sql, array(3, 'live', 'Rick'));
この時、無関係な?は置換されないようになってますか?
たとえば、クエリの中に、hoge = 'fuga???'があった時など
0453nobodyさん
2008/08/29(金) 08:50:09ID:???できれば、あるコントローラのメソッド内で、別のコントローラをnewしてメソッドを実行できるのがいちばん理想的なんですが、そんなことできますか。
0454nobodyさん
2008/08/29(金) 11:22:01ID:???application/libraryにMY_Controllerを置き、共通メソッドはそこに置く。
そのメソッドを使うコントローラはextends MY_Controllerで作る。
0455nobodyさん
2008/08/29(金) 11:44:55ID:???しかしそれをしていると、だんだん多重継承っぽい事がしたくなってくるという罠
シンプルな処理、Controllerのプロパティ、機能等が必要ない様なものは、
ユーティリティクラスに切り出すとかもありかと思う
そして、libraries がカオスになるというセンスのない俺
0456nobodyさん
2008/08/29(金) 14:42:55ID:???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:???びっくりするくらい亀レスですが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:q2obqPa7Fatal 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:???「MY_がついてて、MY_の後の最初の1文字だけが大文字」の命名ルールに従ってないと
オートローディングできないですよ〜。
(プレフィクスはconfig.phpでMY_以外に変更可能)
命名規則を揃えるか、自前でコントローラクラスにrequire_onceを書くか、どっちかの手当てが
必要。
0460nobodyさん
2008/09/14(日) 01:01:21ID:cUARlcyzありがとうございました。大変助かりました!
0461nobodyさん
2008/09/18(木) 13:09:07ID:???どっちも関数を提供するだけで、違いが内容に見えます。
0462nobodyさん
2008/09/18(木) 16:11:44ID:nzPLdxkT0 出力なし
1 ERROR
2 INFOも
3 DEBUGも
じゃない?
0463nobodyさん
2008/09/18(木) 17:07:43ID:???ciはアメリカ人らしく独自すぎるところが結構ある
0464nobodyさん
2008/09/18(木) 17:47:47ID:nzPLdxkTしきい値勝手に変えちゃったもん。
0465nobodyさん
2008/09/22(月) 21:08:37ID:???もしかして静的にテーブル溜め込んでんの?
0466nobodyさん
2008/10/08(水) 18:34:20ID:???うちはCIのWikiに出てたSimpletesterをいじりながらなんとかやってますけど、
1フォルダ内のテストクラスを全実行することしか出来なくてちょっとこまってます。
ttp://codeigniter.com/wiki/SimpleTester_-_Unit_testing_library/
0467nobodyさん
2008/10/20(月) 05:19:44ID:???0468nobodyさん
2008/10/20(月) 05:21:12ID:???0469nobodyさん
2008/10/24(金) 20:58:58ID:???0470nobodyさん
2008/10/28(火) 10:49:17ID:???0471nobodyさん
2008/10/28(火) 14:21:52ID:???→configに定義したものから読み込み可能になった
sessionデータをDBに保存するように変更とソレに伴ってテーブル定義変更
この二つ位かな?個人的には
詳しくは
http://codeigniter.com/user_guide/changelog.html
0472470
2008/10/28(火) 20:20:01ID:???0473nobodyさん
2008/11/12(水) 18:05:07ID:???http://www.example.com/index.php/aaa/
を
http://www.example.com/aaa/
でアクセスできるようにすると、動かないのですかね・・・
0474nobodyさん
2008/11/30(日) 21:27:31ID:???>クライアント接続文字エンコードを設定できませんでした
検索したら対策がヒット
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:4yAH9v9bURIクラスを使えばOK?
http://codeigniter.jp/user_guide_ja/libraries/uri.html
URIセグメントの文字列は、URIクラスにより配列にセットされます。
segment_array()メソッドを使うことで、この配列にアクセスできます。
0477nobodyさん
2008/12/09(火) 14:53:50ID:3E19WexF貧弱なCRUDを補おうと思って使ってみようとしたんだけど、
公式ページのdocumentaionみても全然情報がなくて困ってる・・・
Rapyd: Minimalistic, Open source, Secure, and Small PHP 5 Framework
http://www.rapyd.com/
0478nobodyさん
2008/12/17(水) 20:08:15ID:???いまさらだが
$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はさすがに機能がなさ過ぎる感・・・
0481nobodyさん
2008/12/19(金) 20:16:08ID:f2L1j1eM同じく。それが安心だね。掛け忘れもおきないし。
0482nobodyさん
2008/12/20(土) 23:58:43ID:???私も最近、ログイン認証のやり方をどうしたらいいか悩みました。
(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:???CL_Authの派生版なんですね。
FreakAuth_light 入れようとしたら、結局 1.7.0 だと改造必要なので困ってしまいました。
DX Auth は1.7.0対応してるみたいなのでよいですね。
0486nobodyさん
2008/12/23(火) 19:30:01ID:???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:???他力本願で申し訳ないけど、早く日本語で読みたいw
翻訳作業に限らず、ユーザ会の皆さんには本当に感謝!
0489nobodyさん
2008/12/29(月) 01:22:24ID:???0490488
2008/12/29(月) 12:21:19ID:L94/Z1Ymはい、そのとーりですw
100点!
0491nobodyさん
2008/12/29(月) 15:23:16ID:???0492nobodyさん
2008/12/29(月) 20:26:52ID:???そのあと英語のドキュメントを読んでも理解しやすいよね?
CodeIgniterと英語の勉強になれば一石二鳥だ!
0493みなさん来年も良いお年を!
2008/12/29(月) 20:31:46ID:???おかげでCodeIgniterの学習コストが少しで済んだ。
本も買って、何度も読み返している。
WEBアプリを作るのが楽しいと思える今日この頃。
今もプログラミングしてるし。^^
CodeIgniter日本語版のおかげで、デスマの日々を過ごしたトラウマから立ち直れそうです。(・∀・)
0494nobodyさん
2009/01/15(木) 21:00:02ID:???願わくば 1.7 の差分を公開を!
今は、Form ValidationやDBのセッション使うみたいだしね
0495nobodyさん
2009/01/15(木) 21:02:33ID:???Validation後の値をとるときってどうすればいいんですかね?
DX_authとか見てるとプログラム中で(controller/auth.phpとかで)
set_value() 使っているんだけど、メソッド名的になんか変なんですが、こんなもんでしょうか?
フォーラムとか見ると、
$this->input->post('mage');
使えってあったけど、これって直接入れた値なんじゃないのかな?不安なんですが・・
0496nobodyさん
2009/01/15(木) 22:08:30ID:???0497nobodyさん
2009/01/15(木) 22:25:21ID:???たぶん、サニタイズ?とごっちゃになってるんだろうなー
というか、入力データをとりあえず変換するっていう発想はなかなかなくならないのな。
実際、入力値を変換するっていう処理が本当に必要なのは文字コードの変換くらいだろうと
思うんだが・・・
どうも質問で想定されてるのが、例えば数字・記号の全角半角変換や検索キーワードの
平仮名←→カタカナ変換等の親切処理とか、メール送信等を考えての半角カナ・機種依存
文字や絵文字などを置換・削除する処理などではない雰囲気なのが、なんだかなあ
0498nobodyさん
2009/01/15(木) 22:45:47ID:???form_validation->run実行してtrueだったらvalidationを通った値ということなので、そのまま$this->input->post使えばいいと思うよ。
それでも心配なら自分でコード書いてテストすればよろし。
という話だと解釈したんだが間違ってたらすまん。
0499495
2009/01/18(日) 15:11:26ID:???Validateつまり検証するだけだから、検証にパス(runでTRUEが返る)したら、
その時点でOKだから、input->post使えばいいのか。
修正とか変換するわけではないのね・・・。
set_value() はviewのformに前の入力値をデフォルト表示するためのものだから、
そう使うべきのもの。
■ このスレッドは過去ログ倉庫に格納されています