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データ読み込み

  • controllerにてAfter.phpに以下のソースにする
    • application/controllers/After.php
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で取得したデータを表示させる

  • viewにてafter.phpに以下のソースにする
    • application/views/after.php
<body>
<?php foreach ($result as $results): ?>
  <p><?php echo $results->poem; ?></p>
<?php endforeach; ?>
</body>

$resultをforeachで回して取得したデータがstdClass型なので アロー記号でカラムを指定して中身を表示させると 以下のようにデータが取得できていることがわかります。

f:id:suga-tech3:20160814021129p:plain

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

viewsディレクトリにafter.phpを追加する

<?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を導入してみる

  • さくらVPSは契約しているけどあまり使っていなかったこと
  • 他のフレームワークを勉強してみたいと感じたこと

Codeigniterとは

MVC構造を取るPHP製のWebアプリケーションフレームワークである。

  • メリット

    • コードが見やすい
    • 動作が早い
    • 3.0以降からcomposerが導入されている
  • デメリット

    • データベースアクセス機能が基本構造のみ
    • 大型開発には向いていない

環境

CodeIgniterをインストール

以下URLよりCodeigniterのZipファイルをダウンロードし展開する

https://codeigniter.com/

ドキュメントルートのpublic_htmlディレクトリ配下に展開した以下ファイル、ディレクトリをアップロードする

  • public_html
    • application
    • composer.json
    • contributing.md
    • index.php - license.txt
    • readme.rst
    • system
    • user_guide

設定ファイル編集

application/config/config.php

$config['base_url']  = '/';
$config['url_suffix'] = '.html';

上記のように設定し http://example.com にアクセスしてみると以下のように簡単にcodeigniterが作られたのがわかると思います。

f:id:suga-tech3:20160807024803p:plain

次回はMVCの基礎を触っていきます。

jsによる正規表現

jsによる正規表現

  • 主にエラーチェック
  • 文字の抽出に使われる

正規表現基本

<script>
var s = '@kosachan, @sugatech, @taketech';
var rs = s.match(/kosachan/);

if (rs) {
  console.log(rs);
}
</script>

これでconsoleを見ると 以下のように取得できていることがわかりますね

f:id:suga-tech3:20160731181152p:plain

メタ文字

  • [abc] → abcのどれかの文字
  • [a-z] → a~zまでに該当する文字
  • [^abc] → abcのどれでもない何かの文字

. 任意の一文字

  • (/kosa...n/) これで.には3文字何かしらの文字が入ります

^ 行頭

  • (/^@kosachan/) @kosachanだけ取得することができます

## $ 行末  (/@kosachan$/) 行末の@kosachanを取得することができます

{} 直前の文字の繰り返し回数

  1. 0{2} → 00の文字列
  2. 0{2,} → 00, 000, 000...の文字列を取得
  3. 0{2,4} → 00, 000, 0000の文字列取得

繰り返しの応用

  1. a-z]{5} → a-zの文字の5文字繰り返し
  2. {a-z}{3.6} → a-zの文字が3文字から6文字の繰り返し

?, *, +, |

  1. a? → 空文字, a
  2. a* → 空文字, a, aaaa, aaaa...
  3. a+ → a, aaa, aaaa...
  4. (abc|def) → abcあるいはdefの文字列

\n, \t, \d, \w, \s,

  1. \n -> 改行
  2. \t ->タブ
  3. \d -> 数字[0-9]
  4. \w -> 英数字[A-Za-z0-9_]
  5. \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);

このように出ますね

f:id:suga-tech3:20160731181853p:plain

日付を日本語表記にする

var s = '2016-07-31';
var rs = s.match(/(\d{4})[-\/](\d{2})[-\/](\d{2})/);

console.log(RegExp.$1 + '年' +RegExp.$2+'月' + RegExp.$3+ '日');

このように出ますね f:id:suga-tech3:20160731181906p:plain


正規表現を用いて色々応用させることができそうです。

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/~~] と設定ファイルの外だしに成功!

参考資料: https://github.com/Torann/laravel-geoip/issues/37

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やコードを削減することができます。

qiita.com

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 &