質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

解決済

1回答

4303閲覧

CodeIgniterでGETパラメータのバリデーションを行いたいです

baizo34

総合スコア18

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

0クリップ

投稿2014/06/03 08:04

PHPフレームワークであるCodeIgniterのフォームバリデーションに関する質問です。

CodeIgniterでPOSTパラメータではなくGETパラメータでフォームバリデーションを実行したいです。
が、いくら調べてもその方法が載っておらず困っています。

そもそもGETパラメータでフォームバリデーションを行うこと自体無理があるのでしょうか・・?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

デフォルトでは無理ですが、
CI_Form_validationクラスを上手く拡張すれば可能です。

実際に以前CodeIgniterを使用したWebアプリ開発の現場で、
私はGETパラメータでのフォームバリデーションが実行できるように拡張した経験がありますので。

簡単に言うと、デフォルトの処理では$_POSTをそのまま使い回しているので、
バリデーションを実行する前にあらかじめGETないしPOSTパラメータの値をクラス変数におさめておけばい
いわけです。

具体的にはCI_Form_validationを拡張したMY_Form_validationクラスで4つの処理を加えます。

1.以下クラス変数を定義
// リクエストパラメータ値 private $_params; // リクエストメソッド prvate $_request_method;

2.コンストラクタでリクエストメソッド別にパラメータ値をクラス変数に入れる
`
public function __construct($rules = array()) {
parent::__construct($rules);

// リクエストメソッドを取得 $this->_request_method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : '';

// リクエストメソッド別にパラメータ値をクラス変数に設定 ※今後PUTやDELETEメソッドへの対応も考慮してswtitchにしておく
switch ($this->_request_method) {
case Service_const::REQUEST_METHOD_GET:
$this->_params = $_GET;
break;
case Service_const::REQUEST_METHOD_POST:
$this->_params = $_POST;
break;
default:
$this->_params = $_POST;
break;
}
}
`
3.CI_Form_validationのrunメソッドをオーバーライド

既存の処理に対する変更は、2点です。

 ・メソッド内に出現する$_POSTを$this->_paramsに一括置換
・_reset_post_arrayメソッドをコールしている箇所を以下のようにPOSTメソッドの場合のみコールするように修正

// ※REQUEST_METHOD_POSTは各リクエストメソッドを定数として定義しています if ($this->_request_method === REQUEST_METHOD_POST) { $this->_reset_post_array(); }

4.CI_Form_validationのset_rulesメソッドをオーバーライド
・runメソッドと同じくメソッド内に出現する$_POSTを$this->_paramsに一括置換

上記4点を修正し、あとはPOSTメソッド時と同様にフォームバリデーションを実行すれば動きます。

投稿2014/06/04 07:38

magician

総合スコア41

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問