CakePHP2.x」カテゴリーアーカイブ

CakePHP2.x CakeEmailでメール送信

ここではCakePHP2.xでCakeEmailを使いメールの送信をします。

cakephp

email.phpの設定

/app/Config/email.php

<?php

    class EmailConfig {
   
        public $default = array(
                'transport' => 'Mail',
                'from' => 'info@example.com',
                'emailFormat' => 'text',
        );
    }

text形式で送信する単純な設定ファイルです。

Layoutファイル作成

/app/View/Layouts/Emails/text/layout.ctp

ヘッダ文章
   
<?php echo $content_for_layout; ?>
   
フッダ文章

Layout内でのView読み込みはいつもどおり$content_for_layoutで読み込めます。

Viewファイル作成

/app/View/Emails/text/tmp.ctp

●お名前:<?php echo $name; ?> 様
●フリガナ:<?php echo $furigana; ?> 様

この例では「様」があるので自動的に改行されますが、行の最後に変数が来る場合は自動的に改行されません。

●お名前:<?php echo $name . "\n"; ?>
●フリガナ:<?php echo $furigana . "\n"; ?>

このように改行を入れてください。
※シングルクォーテーションでは改行されません、ダブルクォーテーションを使用してください。

コントローラー内の記述

読み込み

App::uses('CakeEmail', 'Network/Email');

送信

// /app/Config/email.phpの設定読み込み
$email = new CakeEmail('default');
  
// テンプレートに渡す変数
$arrVal = array (
        'name' => '名前',
        'furigana' => 'フリガナ',
);
  
// 送信
$email->template('tmp', 'layout')
      ->viewVars($arrVal)
      ->to('to@example.com')
      ->subject('件名')
      ->send();

解説

$email->template(‘tmp’, ‘layout’); (11行目)
第一引数に読み込むViewファイル、第二引数に読み込むLayoutファイルを指定します。

$email->viewVars($arrVal); (12行目)
Viewファイルに変数を設定します。

$email->to(‘to@example.com’); (13行目)
メールを送信する宛先です。

$email->subject(‘件名’); (14行目)
件名の設定です。

$email->send(); (15行目)
メールの送信です。

最後にCakePHP2.x CakeEmailの公式ドキュメントです。
http://book.cakephp.org/2.0/en/core-utility-libraries/email.html

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と同じ出力結果になります。

CakePHP2.x LayoutsファイルでCSSの読み込み

ここではCakePHP2.xのLayoutファイルでのCSSの読み込みについて解説しています。

cakephp

Controllerで読み込むcssファイルを設定

<?php

    $arrCss = array();
    array_push($arrCss, 'common');
    array_push($arrCss, 'default');
    $this->set('arrCss', $arrCss);

拡張子の「.css」は省略して記述してください。
読み込むcssファイルは
/app/webroot/css/以下に配置します。

Layoutsファイル

<?php echo $this->Html->css($arrCss, 'stylesheet', array('media'=>'screen'));?>

Layoutファイルのhead内に記述します。
これでCSSファイルの読み込みができます。

出力結果

<link rel="stylesheet" type="text/css" href="/css/common.css" media="screen" />
<link rel="stylesheet" type="text/css" href="/css/default.css" media="screen" />

/app/webroot/css/以下にフォルダを作る場合

<?php

    $arrCss = array();
    array_push($arrCss, 'admin/common');
    array_push($arrCss, 'admin/default');
    $this->set('arrCss', $arrCss);

/app/webroot/css/admin/以下にcssファイルを配置した場合の例です。
$this->Html->css();で生成されるcssファイルの場所は/app/webroot/css/がデフォルトなので、/app/webroot/css/以下を指定します。

出力結果

<link rel="stylesheet" type="text/css" href="/css/admin/common.css" media="screen" />
<link rel="stylesheet" type="text/css" href="/css/admin/default.css" media="screen" />

関連記事
CakePHP2.x LayoutsファイルでJavascriptの読み込み