CodeigniterでmodelとDBを使って見る
Codeigniterで基本のMVCしてみる
前回はCodeigniterのcontrollerとviewの基本を使ってみた 今回はmodelとDBを用いたMVCの流れを一連でやってみました。
- まず以下のdatabaseファイルに情報を入力する
- application/config/database.php
$db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'name', 'password' => 'password', 'database' => 'database_name', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
Modelの書き方
- 上記の情報を入れたらデータベースに接続可能であるかmodelでチェックしてみる。
- application/models/Model.php
class Model extends CI_Model { function __construct(){ parent::__construct(); $this->load->database(); } function getData($page){ $query = $this->db->get("poem"); return $query->result(); } }
まずapplication/models配下にModel.phpを作成する。 コンストラクタ内でデータベースに接続できているか確認する。
getData関数を作成し$queryを作成する この$this->db->get()でpoemテーブルの中身を全件取得することができる。
Controllerにてmodelデータ読み込み
class After extends CI_Controller { public function index() { $this->load->model("Model"); $data['result'] = $this->Model->getData("poem"); $this->load->view("after", $data); } }
Model.phpを読み込んでgetData関数にてpoemテーブルの情報を配列に格納し それをafter.phpのviewに値を渡す。
view側では以下のようにデータを取得する。
viewにmodelで取得したデータを表示させる
<body> <?php foreach ($result as $results): ?> <p><?php echo $results->poem; ?></p> <?php endforeach; ?> </body>
$resultをforeachで回して取得したデータがstdClass型なので アロー記号でカラムを指定して中身を表示させると 以下のようにデータが取得できていることがわかります。
Codeigniterの基本動作をしていきましたが難しくなくコードが書きやすく分かりやすいです。次は何かしらサイトを作っていけたらと思います。
Codeigniter初めてのcontrollerデータ渡し
Route
ルーティングでは一旦default_controllerを使う - application/config/route.php
$route['default_controller'] = after;
このafterがControllerのクラスになる
Controller
クラスを作っていきたいが afterクラスを作成するがここがポイント クラスのphpファイルには先頭を大文字で設定する - After.php
class After extends CI_Controller { public function index() { $data['message'] = 'Hello world!'; $this->load->view('after', $data ); } }
View
<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?><!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>CodeIgniter</title> </head> <body> <p><?php echo $message;?></p> </body> </html>
$data['message']で渡されたデータをview側で展開すると$messageでデータを取得することが可能となる
表示をみる
URLにアクセス http://example.com/index.php/before すると Hello world!が表示されていることが確認できます。
- URLにindex.phpが含まれている
codeigniterの設定ではindex.phpを経由して表示させることからURLにも反映してしまう。 このURLを取り除きたい場合は.htaccessファイルをpublic_html配下にアップロードする。
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ index.php/$1 [L] </IfModule>
上記ファイルを配置するだけで以下URLで表示を確認することができる。 http://example.com/before
まとめ
index.phpのURL排除に少しつまずいたものの簡単に確認することができました。 次回はDBを用いた記事を書きたいと思います。
さくらVPSにCodeigniterを導入してみる
Codeigniterとは
MVC構造を取るPHP製のWebアプリケーションフレームワークである。
メリット
- コードが見やすい
- 動作が早い
- 3.0以降からcomposerが導入されている
デメリット
- データベースアクセス機能が基本構造のみ
- 大型開発には向いていない
環境
- ドキュメントルート: /var/www/example/public_html/
- URL : http://example.com
CodeIgniterをインストール
以下URLよりCodeigniterのZipファイルをダウンロードし展開する
ドキュメントルートのpublic_htmlディレクトリ配下に展開した以下ファイル、ディレクトリをアップロードする
- public_html
設定ファイル編集
application/config/config.php
$config['base_url'] = '/';
$config['url_suffix'] = '.html';
上記のように設定し http://example.com にアクセスしてみると以下のように簡単にcodeigniterが作られたのがわかると思います。
次回はMVCの基礎を触っていきます。
jsによる正規表現
jsによる正規表現
- 主にエラーチェック
- 文字の抽出に使われる
正規表現基本
<script> var s = '@kosachan, @sugatech, @taketech'; var rs = s.match(/kosachan/); if (rs) { console.log(rs); } </script>
これでconsoleを見ると 以下のように取得できていることがわかりますね
メタ文字
- [abc] → abcのどれかの文字
- [a-z] → a~zまでに該当する文字
- [^abc] → abcのどれでもない何かの文字
. 任意の一文字
- (/kosa...n/) これで.には3文字何かしらの文字が入ります
^ 行頭
- (/^@kosachan/) @kosachanだけ取得することができます
## $ 行末 (/@kosachan$/) 行末の@kosachanを取得することができます
{} 直前の文字の繰り返し回数
- 0{2} → 00の文字列
- 0{2,} → 00, 000, 000...の文字列を取得
- 0{2,4} → 00, 000, 0000の文字列取得
繰り返しの応用
- a-z]{5} → a-zの文字の5文字繰り返し
- {a-z}{3.6} → a-zの文字が3文字から6文字の繰り返し
?, *, +, |
- a? → 空文字, a
- a* → 空文字, a, aaaa, aaaa...
- a+ → a, aaa, aaaa...
- (abc|def) → abcあるいはdefの文字列
\n, \t, \d, \w, \s,
- \n -> 改行
- \t ->タブ
- \d -> 数字[0-9]
- \w -> 英数字[A-Za-z0-9_]
- \s ->スペース、タブ
* +のあとの?
(/+?@hogehoge.com/)
→ これで最初のマッチする文字列だけ取得することが可能
TwitterのユーザIDを取得
/(@[A-Za-z0-9_]{1,15})/
→ これで@hogehogeなどのtwitterIDを取得可能「
タイトルタグ抽出
var s = '<title>こさちゃん技術アップ</title>' var rs = s.match(/<title>([^<]+)<\/title>/); console.log(RegExp.$1);
このように出ますね
日付を日本語表記にする
var s = '2016-07-31'; var rs = s.match(/(\d{4})[-\/](\d{2})[-\/](\d{2})/); console.log(RegExp.$1 + '年' +RegExp.$2+'月' + RegExp.$3+ '日');
このように出ますね
正規表現を用いて色々応用させることができそうです。
Laravelのパッケージ導入の際の設定ファイル外だし
laravelでパッケージを導入し、設定ファイルを外だしするときにつまずいたところ
laravelでのパッケージ導入
1, composer によるインストール
2, app.phpにあるサービスプロバイダーなどにコードを追加
3, 設定ファイル出力
php artisan vendor:publish
するとこんなエラーに遭遇 Nothing to publish for tag [].
このようなエラーが出た場合configの内容をcacheする必要がある
解決方法
php artisan config:clear
これをすることでconfigの内容がクリアされる
もう一度実行してみる
php artisan vendor:publish
Copied Directory [/vendor///views] To [/resources/views/vendor/~~]
と設定ファイルの外だしに成功!
HTML5での独自データ属性(jQuery)
独自データ属性とは
HTML要素の属性として定義されていないwebページやwebアプリケーション固有の属性のこと。webページやwebアプリケーションで固有の独自データを取得する際に仕様する。
独自データ属性の定義
属性名の先頭に「data- 」をつける
<ul> <li id="number" data-id="1">No.1</li> </ul>
独自データ属性の値を取得
<script> var number = ("#number"); console.log(number.data('id')); </script>
上記のdata-id以外にもdata-dateなど複数指定しても取得することができる。 これによってjs上でphpコードを埋め込んだり無駄なjsやコードを削減することができます。
laravelでserverのport番号を変えよう
laravelでのport番号変更
下記でwebサーバーを起動させる
php artisan serve
ローカル環境での開発にて現在の設定が8000のportである
localhost:8000
例えば8080のportに変更させたい そのときに使う方法
php artisan serve --port=8080
もし80のportでしたいならsudoのコマンドが必要
sudo php artisan serve --port=80
hostとportを指定したい場合
php artisan --host=127.0.0.1 --port=9999
上記のコマンドを良く使う場合shellに記述すると楽になる。
#!/usr/bin/env bash php artisan --host=127.0.0.1 --port=9999 &