月別アーカイブ: 2013年12月

Windows XAMPP EclipseでXdebugを使ってデバッグする

ここではWindows環境でXAMPP、EclipseでXdebugを使ってデバッグをする方法を解説しています。

eclipse

php.iniの編集

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
;xdebug.profiler_append = 0
;xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
;xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
;xdebug.trace_output_dir = "C:\xampp\tmp"

xampp\php\php.iniの最後を編集します。
zend_extensionへのパスはphp_xdebug.dllがある場所を指定してください。

Eclipseの設定

xdebug

デバッグの構成からサーバー・デバッガーをXDebugに設定すれば、Xdebugでデバッグをかけれます。

Windows XAMPP インストール

ここではWindows環境にXAMPPをインストールする方法について解説しています。

xampp

XAMPPのダウンロード
http://www.apachefriends.org/jp/xampp-windows.html
最新版のインストーラーを選択し、ダウンロードしてください。

A方式: インストーラを使ってインストールする

ダウンロードした.exeファイルを起動しC直下にインストールします。

XAMPPコントロールパネル

C:\xampp\xampp-control.exeを起動させて、Apache、MySQLを起動させます。

xampp-control-panel

初期設定

インストールが終了したら、http://localhost/にアクセスします。
XAMPP Control PanelのApache、Adminで開けます。

左側メニューからセキュリティを選択し、phpMyAdminのパスワードを設定します。

xampp

phpMyAdminのパスワードが設定されたかhttp://localhost/phpmyadmin/にアクセスして確認してください。
XAMPP Control PanelのMySQL、Adminで開けます。

C:\xampp\htdocsがwebrootになります。

CakePHP2.x Layout、Viewファイルの拡張子を.ctpから変更する

ここではCakePHP2.xでViewファイルの拡張子「.ctp」を変更する方法を解説しています。

cakephp

Controller毎に設定する方法

<?php

    class PageController extends AppController {
        public function index() {
            $this->ext = 'php';
        }
    }

例ではViewファイルの拡張子を「.php」に変更しています。
この方法はPageControllerで読み込んだLayout、Viewファイルにのみ適応されます。

全てのControllerに設定する方法

<?php

    class AppController extends Controller {
        public $ext = '.html';
    }

例ではViewファイルの拡張子を「.html」に変更しています。
この方法はAppControllerを継承した全てのControllerでLayout、Viewファイルに適応されます。

CakePHP2.x ルーティング Router::connect

ここではCakePHP2.xでのURLルーティングする方法を解説しています。

cakephp

記述場所

/app/Config/routes.php

CakePlugin::routes();

以前に記述してください。

PageControllerのアクションメソッドdisplayの場合

Router::connect('/admin/index', array('controller' => 'Page', 'action' => 'display'));

/admin/indexにアクセスするとPageControllerのdisplayが呼ばれます。

PageControllerのアクションメソッドindexの場合

Router::connect('/admin/index', array('controller' => 'Page'));

/admin/indexにアクセスするとPageControllerのindexが呼ばれます。
アクションメソッドがindexの場合は省略できます。

PageControllerのアクションメソッドdisplayにパラメータを渡す場合

Router::connect('/admin/index/:id', array('controller' => 'Page', 'action' => 'display', array('id' => '\d+')));

/admin/index/1にアクセスするとPageControllerのdisplayが呼ばれます。
\d+の箇所は正規表現で指定できます。
このルーティングでは/admin/index/aaaなど数字以外のパラメータはエラーになります。

パラメータの受け取り

<?php

    class PageController extends AppController {
        public function display() {
            $id = $this->request->params['id'];
        }
    }

パラメータが複数の場合

Router::connect('/admin/:lang/article/:id', array('controller' => 'Page', array('lang' => 'jp|en|ch', 'id' => '[0-9]+')));

/admin/jp/article/1
/admin/en/article/2
/admin/ch/article/3
にアクセスした場合
PageControllerのアクションメソッドindexが呼ばれます。

パラメータの受け取り

<?php

    class PageController extends AppController {
        public function index() {
            $lang = $this->request->params['lang'];
            $id = $this->request->params['id'];
        }
    }

CakePHP2.x Viewファイルに変数を渡す

ここではCakePHP2.x Viewファイルに変数を渡す方法について解説しています。

cakephp

ControllerでViewファイルに変数を渡す (方法1)

<?php

    $var = "var";
    $array1 = array(1,2,3);
    $array2 = array(
        "foo" => "bar",
        "bar" => "foo",
    );
    $hoge = 123;

    $this->set('var', $var);
    $this->set('array1', $array1);
    $this->set('array2', $array2);
    $this->set('hogehoge', $hoge);

$this->setの第一引数にViewファイルで使う変数名を、第二引数に受け渡す変数を指定します。
例では変数、配列変数、連想配列を渡しています。

Viewファイルで受け取った変数の表示

<?php

    echo $var;
    foreach($array1 as $val) {
        echo $val . "<br />";
    }
    foreach($array2 as $key => $val) {
        echo $key . "=>" . $val . "<br />";
    }
    echo $hogehoge;

$this->setの第一引数で指定した文字列が変数名になります。

出力結果

var1
2
3
foo=>bar
bar=>foo
123

ControllerでViewファイルに変数を渡す (方法2)

<?php

    $var = "var";
    $array1 = array(1,2,3);
    $array2 = array(
        "foo" => "bar",
        "bar" => "foo",
    );
    $hoge = 123;

    $setData = array(
        'var' => $var,
        'array1' => $array1,
        'array2' => $array2,
        'hogehohe' => $hoge,
    );
    $this->set($setData);

$this->setに連想配列としてViewファイルに変数を渡すこともできます。
方法1と同じ出力結果になります。