50の手習い(。_。;)Codeigniter

初心&高齢&鬱3重苦の私がCodeigniterを使っての管理画面作成に奮闘。はまりまくり、ときに思考停止に陥りながら、切り抜けていく軌跡をメモしていきます。

動作環境を作る

//TODO インストールとか、初期設定

xamppを利用。

http://sourceforge.jp/projects/xampp/

これの使い方はここのサイトが親切

http://www.adminweb.jp/xampp/

次にcodeigunaiterダウンロード(ci-ja-all-in-one-2.0.3-1))
違うボタンを押すととんでもないウィルス拾ってしまいますので要注意

http://sourceforge.jp/projects/codeigniter/releases/

ファイル>インポート>一般>ファイルシステム>参照
から上記フォルダを選択し、次画面で以下にチェックし、「完了」押下 ・application  ・system ・index.php ブラウザから以下URLでアクセスしてみる。  http://localhost/プロジェクト名/index.php  「CodeIgniter へようこそ!」などが表示されれば成功。   別のIPやurlでのアクセスを有効にするためhostsいじる必要がある場合にかかわってくるのはhosts以外はここ↓ C:\xampp\apache\conf\httpd.conf C:\xampp\apache\conf\extra ←ここに新しい.confがふえていたりする ※ここでpath名を間違えると(例えばhttp://なんていれたり、urlの最後に"/"入れたり)つながるものもつながらない。これは、間違いだと思ってないだけに、サイトがみえないと「どうして?どうして?」になる、見逃しやすくしかも致命的なミス。

ここからはユーザーズリファレンスどおりにやればOK。

http://codeigniter.jp/user_guide_ja/toc.html

config/config.php

urlパス設定:$config['base_url'] = "http://localhost/codeigniter/index.php/";
文字コード設定:$config['charset'] = "UTF-8";
URLキャラクタ:$config['permitted_uri_chars'] = '一-龠ぁ-んァ-ヴーa-zA-Z0-9a-z 0-9~%.:_-';
ログインのパスワードを加工する場合以下設定が必要。32文字はご自由に:
$config['encryption_key'] = "dmocwwmjxrlnmmE9ccvpmlvvl?4qdgdO"; 必ず呼び込むライブラリはここで入れておきます。 detabaseは絶対使うでしょうし、ログイン使うならsessionも必要。なので $autoload['libraries'] = array('database', 'session'); ※ちなみに、ここで呼ぶlibrariesは、system/librariesにあるファイル名です。

databaseを利用するならconfig/database.phpの設定を忘れずに。例えば以下のように。

config/database.php

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = 'パスワード';
$db['default']['database'] = 'one_line_bbs';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
}

この設定でURLパスを決めておくこと
必ずそうする必要はないけれど、これから出てくるバリデートチェックについては、ルールを外に出してしまえば、本文が短くなります。

config/form_validation.php

 <?php
    $config = array(
       array(
       'field' => 'name'
       , 'labbel' => 'お名前'
       , 'rules' => 'required|htmlspecialchars' 
       ),
       array(
       'field' => 'email'
       , 'labbel' => 'メールアドレス'
       , 'rules' => 'required|valid_email'
       ),
       array(
       'field' => 'passw'
       , 'label' => 'パスワード'
       , 'rules' => 'required|min_length[4]'
       ), 
       array(
       'field' => 'picture'
       , 'label' => '写真'
       , 'rules' => 'htmlspecialchars'
       ) 
   );
}

本文中(contoroller/input.php)で、以下のように設定すればOK。

contoroller/input.php

if($this->form_validation->run('form_validation') == TRUE)

もっともinput.phpの下にでも関数_set_validationをつけておくと

function _set_validation()
{
  $this->load->library('form_validation');
  $this->validation->set_error_delimiters('<div class="error">', '</div>');
  $this->form_validation->set_rules('entry', 'テキスト', 'required|min_length[5]|max_length[12]');
  $this->form_validation->set_rules('passw', 'パスワード', 'required');
  $this->form_validation->set_rules('email', 'メールアドレス', 'required');
  $this->form_validation->set_rules('picture', '画像', 'required');
}

バリデーション設定部分で

$this->_set_validation();

と呼べばいいから、これでよいと思います。

バリデートチェックは自分で作成できます。

   function conf()
   {
     /* (略) */
      $this->form_validation->set_rules('product', '商品', 'required|trim|callback__my_check');
     /* (略) */
    }

    function _my_check($val)
    {
        /* コード */
    }

//TODO 年月日のチェック

CMVのCの部分が根幹。これはcontrollerフォルダに書く。

例えばこんな感じ。contoroller/input.php

CI_Controller {

  function index()
  {
    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');

    $this->form_validation->set_rules('username', 'ユーザ名', 'required');
    $this->form_validation->set_rules('password', 'パスワード', 'required');
    $this->form_validation->set_rules('passconf', 'パスワードの確認', 'required');
    $this->form_validation->set_rules('email', 'メールアドレス', 'required');

    if ($this->form_validation->run() == FALSE)
    {
       $this->load->view('myform');
    }
    else
    {
      $this->load->view('formsuccess');
    }
  }
}

ファイル名input.phpなら、クラス名は「Input」。デフォルトで読むのはindexの部分。

urlは、configのurl_passで宣言したパス/input になります。

http://localhost/codeigniter/index.php/input/

CMVのVはviewsフォルダに入れます。ここで使っているのはmyformとformsuccessだから、

views/myform.php

 <html>
<head>
<title>マイフォーム</title>
</head>
<body>

<?php echo validation_errors(); ?>

<?php echo form_open('input'); ?>

<h5>ユーザ名</h5>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" />

<h5>パスワード</h5>
<input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" />

<h5>パスワードの確認</h5>
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" />

<h5>メールアドレス</h5>
<input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />

<div><input type="submit" value="送信" /></div>

</form>

</body>
</html>

//TODOあくまてサンプル.あとでかきなおさないと.ホームページの編集って、難しい・・