2016年12月22日木曜日

CakePHP3 ファイルアップロード -- file upload --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


 ■ 前提
  自前でファイルアップロードを作りたい方向けに記述しています。
  CakePHP3 では、有名なファイルアップロード関連のプラグインがありますので、プラグインでもいいって方は、そちらの方が良いかもしれません。
一応、一つご紹介

cakephp-simple-upload

-----------------------------------------------

では、本題へ。
Controllerに実装することもできるのですが、それでは美しくないってことで、ModelクラスのbeforeSaveというメソッドに処理させます。
beforeSaveメソッドについては、こちらを 参照

 == Model ==
     public function beforeSave($event, $entity, $options)
    {
        // entityにファイルが指定されているかどうか
        if ($entity->has('upload_file')) {
            $upload_file = $entity->get('upload_file');
            // ファイルが正しくアップロードされているか
            if ($upload_file['error'] === UPLOAD_ERR_OK && $upload_file['size'] !== 0) {
              
                // ファイルを保存する
                $file = new File($upload_file['tmp_name']);
                $file->copy('/example/dest/upload_file');
            } else {
                // ファイルが指定されていなかった場合、上書きされてしまわないようにする
                $entity->unsetProperty('upload_file');
            }
        }
    }

今回はDB保存する直前に動作するbeforeSaveで処理しましたが、インクリメントされたIDをファイル名に入れたいなど思われる方は、afterSaveメソッドで処理させると良いかもしれません。

最後に問題が、この指定方法だとファイルアップロードに失敗した場合のエラーハンドリングがうまくできないんですよね。
どなたかご教授頂けると幸いです。


 ===================================================

 ■ Premise

  It is written for those who want to make file upload on their own.

  In CakePHP 3, there is a famous plugin related to file uploading, so if you can plugin it may be better there.

  Once, one introduction

cakephp-simple-upload

-----------------------------------------------

 Then, to the main subject.

 It can also be implemented in Controller, but let's say that it is not beautiful and that it is handled by the Model class beforeSave method.

 For the beforeSave method, see here

 == Model ==

     public function beforeSave($event, $entity, $options)
    {
        // Whether a file is specified for entity
        if ($entity->has('upload_file')) {
            $upload_file = $entity->get('upload_file');
            // Is the file uploaded correctly?
            if ($upload_file['error'] === UPLOAD_ERR_OK && $upload_file['size'] !== 0) {
               
                // Save the file
                $file = new File($upload_file['tmp_name']);
                $file->copy('/example/dest/upload_file');
            } else {
                // Do not overwrite if file is not specified
                $entity->unsetProperty('upload_file');
            }
        }
    }


 This time it processed with beforeSave which operates just before saving the DB, but if you think that you want to include the incremented ID in the file name, it may be better to process it with the afterSave method.

 Finally, if the problem is this specification method, error handling can not be done well if the file upload fails, right?

 I hope someone can take a professor.




2016年10月27日木曜日

cakephp3 phpunit 利用時に使える便利なmethodなどについて

PHP Ver 5.6.27
CakePHP Ver 3.1.9


公式ページを見れば記載があるが、少しわかりにくいのでPHPUnitで利用されるファイルやメソッドについて書いておく。


Fixtures:
実際のアプリケーションに使われているデータを破壊することなく テストができる
 ・各フィクスチャで必要なテーブルを作成します
 ・フィクスチャにデータが存在すれば、それをテーブルに投入します
 ・テストメソッドを実行します
 ・フィクスチャのテーブルを空にします
 ・データベースからフィクスチャのテーブルを削除します

記述例(xxxControllerTest.php)
---------------------------------------------------
public $fixtures = [ 'app.user', 'app.article' ];
---------------------------------------------------


setUp method:
テストメソッドの前に毎回呼び出されます
テストされるオブジェクトの生成や、テストのためのデータの初期化に使われます
メールなどの設定はここに記述すると便利
※parent::setUp() を呼び出すことを忘れないでください

記述例(xxxControllerTest.php)
---------------------------------------------------
public function setUp() {
  parent::setUp();

  Email::dropTransport('default');
  Email::configTransport('default', [ 'className' => 'Debug', ]);
}
---------------------------------------------------


tearDown method:
テストメソッドの後に毎回呼び出されます
テストが完了した後のクリーンアップに使われます
※parent::tearDown() を呼び出すことを忘れないでください

記述例 (xxxControllerTest.php)
---------------------------------------------------
public function tearDown() {
  parent::tearDown();
}
---------------------------------------------------


setupBeforeClass method:
クラスのテストメソッドを実行する前に一度だけ呼ばれます
※このメソッドは static でなければなりません

記述例 (xxxControllerTest.php)
---------------------------------------------------
public static function setupBeforeClass() {
  parent::setupBeforeClass();
}
---------------------------------------------------


tearDownAfterClass method: 
クラスのテストメソッドをすべて実行した後に一度だけ呼ばれます
※このメソッドは static でなければなりません

記述例 (xxxControllerTest.php)
---------------------------------------------------
public static function tearDownAfterClass() {
  parent::tearDownAfterClass();
}
---------------------------------------------------

2016年10月13日木曜日

cakephp3 pagenation & meta tag

PHP Ver 5.6.27
CakePHP Ver 3.1.9


ページネーション処理は、Cakephpのデフォルトで準備がされている

まずは、ページネーション使いますよとAppViewのinitializeメソッドで設定

---------------------------------------------------

$this->loadHelper('Paginator');

---------------------------------------------------


Controllerのinitializeメソッド内などで、ページネーションの詳細設定を行う

---------------------------------------------------

$this->loadComponent('Paginator');
$this->paginate = [
                'limit' => 10
        ];

---------------------------------------------------


limitなどはロードした後に設定

では実際に使ってみる
DBから取得してきたqueryをページネーションを使って表示

---------------------------------------------------

$this->set('articles', $this->Paginator->paginate($article->getArticlesQuery(), $this->paginate));

---------------------------------------------------


その後Viewでは気にせず普通にイテレーションしてあげればよい
但し、以下の表示は入れてあげないとページ番号が出てこないので注意

---------------------------------------------------

<?= $this->Paginator->numbers() ?>

---------------------------------------------------

ここで記述した内容はあくまで一例で、参考程度に。

詳しくは、以下参照

http://book.cakephp.org/3.0/ja/controllers/components/pagination.html


備考
rel=prevやrel=nextも自動でやってくれる
Viewファイル内で以下のようにheadタグの中に記述

---------------------------------------------------

<?= $this->Paginator->meta() ?>

---------------------------------------------------

これだけ。便利ですね~

2016年9月30日金曜日

cakephp3 Trimについて

PHP Ver 5.6.27
CakePHP Ver 3.1.9


入力値の前後にある全角/半角スペースを取り除きたい

cakephp3 の Validation では全角スペースだけが入力された場合などは、notEmpty を指定していても、
普通に通ってしまう。

ということで Trim しなければならないのですが、どこのタイミングで行うか。

調べた結果、公式に載っていました。
http://book.cakephp.org/3.0/ja/orm/saving-data.html#before-marshal

テーブルまたはビヘイビアクラスの beforeMarshal メソッドで行いなさいと。
 
タイミングはこれでOK。
しかし、ここに記載されている通り デフォルトのメソッド Trim だけを行ってしまうと
全角スペースは対応できない。

ってことで、全角スペースにも対応した Trim メソッドを作成することに。

----------------------------------

    public static function mb_trim($str) {
        return trim(preg_replace('/[  ]+$/u', '', preg_replace('/^[  ]+/u', '', $str)));
    }
----------------------------------
 
これで良いかと思いきや、半角スペース - 垂直タブ - 全角スペースみたいな入力を
されてしまうと対応できないんですね・・・
対応が難しそうなので、このメソッドは暫定でこのままにしておいて、後々考えようと
思います。 

2016年9月23日金曜日

cakephp3 開発機と本番機でDBの向き先を変える -- custom db connection --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


cakePHPでは、Unit用と通常利用するDBの設定が別々に設定されている。

しかし、一般的には開発機と本番機は別なので、本番機にアップする際に、いちいち設定を変更しないといけない。
そいつはミスする元凶になりそうだし、面倒だなぁ

ってことで、Unit用、開発機用、本番機用の3種類設定を行い、自動的に切り替えるようにしようと思い立つ。

既存のdefault・test以外にDBの向き先を変える方法

まずは、app.phpに設定を加える(ここでは開発機用の設定をdivとして追加)

通常はこんな感じ 
----------------------------------------------
'Datasources' => [

    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => '本番機',
        'log' => false, 'quoteIdentifiers' => false,
    ],
    'test' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'log' => false,
    ],
],
----------------------------------------------

これに以下の内容を追加する

----------------------------------------------
     'div' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => '開発機',
        'log' => false,
    ],
----------------------------------------------

で、切り替える様にコードを改修
 通常Modelの各Tableクラスは

Cake\ORM\Table

を継承しているけど、CustomTableみたいなクラスを作成してModelの各Tableクラスはこの新しく作成したクラスを継承して、CustomTableクラスで既存のTableクラスを継承する。
(要は、間に一枚かますってこと)

で、切り替えを行うために、既に準備されている”defaultConnectionName”というメソッドで向き先を設定してあげる。

と、新しく作成するファイルはこんな感じになる 
----------------------------------------------
class CustomTable extends Table  {

    public static function defaultConnectionName() {
        if (Configure::read('debug')) {
            if (Unitだったら) {
                return 'test';
            } else {
                return 'div';
            }
        } else {
            return 'default';
        }
    }
}
----------------------------------------------

これで、設定ファイルをいちいち設定しなくても良くなる

しかし、const.phpのdebug設定は都度変えないといけない。
その対応は後々考えることに・・・

2016年9月15日木曜日

Google Translateを使用してサイトを多言語化 -- use Google Translate For Localization --

  • Google Translate 登録画面へアクセス(事前にGoogleアカウント取得)
    • https://translate.google.com/manager/website/
    1. 「今すぐウェブサイトに追加」 ボタン押下
    2. ウェブサイトの URLを入力
    3. ウェブサイトの言語を選択
    4. 「次へ」 押下
    5. 翻訳する言語を選択
      1. すべての言語を選択すると一般的に使われない言語が多いので、言語を指定を選ぶことをおすすめ
    6. 表示モード選択
    7. 詳細設定選択
    8. 「コードを取得」 ボタンを押下 
    9. 表示されたHTMLをWebサイトに貼り付け

2016年8月30日火曜日

cakephp3 Cache

PHP Ver 5.6.27
CakePHP Ver 3.1.9


画像やJavascript、CSSをキャッシュしたい場合は、以下のように設定

app.php
-------------------------------------------
    'Asset' => [
        'timestamp' => true, // 画像,JS,CSSのキャッシュを無効にする(デバッグモードのときのみ)
    ],

-------------------------------------------
デバッグモード時に限らず、常にクエリストリングを付けたい場合 : 'force'

2016年8月2日火曜日

Cakephp3 での例外スロー時のPHPUnit -- cakephp3 phpunit throw Exception --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


例外をスローした場合のUnitTestの比較方法を色々と調べてみたが、

------------------------------------------
setExpectedException(InvalidArgumentException)
------------------------------------------

私の環境では、この方法だとなぜか上手くいかない。

try catchでの方法も試してみたが、これも上手くいかない。

なので、少し力技ではあるが、以下のようにした。

------------------------------------------
$this->assertInstanceOf('InvalidArgumentException', $this->_exception);
$this->assertEquals('Invalid Argument', $this->_exception->getMessage());
------------------------------------------


注意:
NotFoundExceptionなどはフルpathで指定しないといけない。
------------------------------------------
$this->assertInstanceOf('Cake\Network\Exception\NotFoundException', $this->_exception);

cakephp3 多言語化 -- localization --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


文字変換用ファイル作成

・src/Locale/{Lang}/default.poを作成
  {Lang}は日本語なら”ja_JP”、英語なら”en_US”

・変換文字列を記載
  msgid "{変換前の文字列}"
  msgstr "{変換後の文字列}"

例:
  msgid "Tweet"
  msgstr "ツイート"

・ini_setで言語の指定
  ini_set('intl.default_locale', 'ja_JP');

これで文字列が変換される。

但し、default.poファイルはキャッシュされるので、追記や変更を行った場合は、tmp/cacheディレクトリを削除するのをお忘れなく。

2016年7月16日土曜日

Google API Client について

Google API Client 1系では、Google_Auth_AssertionCredentials というクラスを利用するが、2系からは使い方が変わったらしい。

資料もあまりないので、自分でドキュメント調べて、実装しようと試みたが、私の利用しているレンタルサーバーはSSLに対応していないので、そもそも利用できなかった。

実装する前に、ちゃんと調べるべきだった。。。

2016年7月1日金曜日

cakephp3 phpunit利用時にメールを飛ばさないようにする方法 -- do not mail send to use phpUnit --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


SetUpメソッドに以下の内容を記載

------------------------------------------------
    public function setUp()
    {
        parent::setUp();

        Email::dropTransport('default');
        Email::configTransport('default', [ 'className' => 'Debug', ]);
    }
------------------------------------------------
※parent::setUp() を呼び出すことを忘れずに


cakephp3 get Controller Name / Action Name

PHP Ver 5.6.27
CakePHP Ver 3.1.9


いつも忘れちゃうので、備忘録として

  • Controller Name
    • ControllerまたはViewで$this->name

  • Action Name
    •  ControllerまたはViewで$this->request->action

2016年6月29日水曜日

cakephp3 subdirectory .htaccess edit

PHP Ver 5.6.27
CakePHP Ver 3.1.9



 レンタルサーバー等を利用した場合等にサブドメインをサブディレクトリに指定することがありますよね。
 その場合には、 以下の設定を変更しないとcakephp3がうまいこと動きません。
 ただ、これだけだけど数時間はまった・・・

  • レンタルサーバー利用時に変更しなければならない.htaccessのmod_rewirte設定
    • app/.htaccess
      • RewriteBase / を追加
    • app/webroot/.htaccess
      •  RewriteBase / を追加


2016年6月28日火曜日

cakephp3 sitemap plugin install

PHP Ver 5.6.27
CakePHP Ver 3.1.9


サイトマップを準備する

cakephp3 にはサイトマップ用のプラグインが準備されているので、利用する。

・インストール
  $ cd app/plugins/
  $ git clone https://github.com/fm-labs/cakephp3-sitemap Sitemap

・Bootstrap.phpにプラグインをロードする内容を追記
--------------------------------
    Plugin::load('Sitemap', ['autoload' => true, 'routes' => true]);
--------------------------------

・SitemapController.phpの作成
--------------------------------
<?php
namespace App\Controller; 

use App\Controller\AppController;

class SitemapController extends AppController
{
    public function initialize()
    {
        $this->loadComponent('Sitemap.Sitemap');
    }

    public function index()
    {
        $this->Sitemap->createIndex();

        $this->Sitemap->create();

            $this->Sitemap->addLocation(
                    ['controller' => '[ControllerName]', 'action' => '[ActionName]', $id], // url
                    1, // priority
                    $value->modified, // last modified date
                    'hourly' // change frequency
            );
    }
}
--------------------------------

Controllerの内容はapp/plugins/Sitemap/src/Controller/SitemapController.phpに記述されているので参考になります。

2016年6月27日月曜日

SEO対策 keyword 選定 tool

SEO対策 KeyWord選定ツール

  ブログ検索
    Ritlweb: http://blog.ritlweb.com/



  キーワード検索数予測ツール
    Rishirikonbu: http://rishirikonbu.jp/





    キーワードウォッチャー: https://www.keywordwatcher.jp/


    Uber: https://ubersuggest.io/


  キーワード検索数調査ツール
    Keyword Tool: http://keywordtool.io/

    GoodKeyword: http://goodkeyword.net/

    Freet+: http://tool.ferret-plus.com/

    SEOチェキ: http://seocheki.net/

    Ranking Checker: http://broadentry.com/rankingchecker/

    Bull: http://bullseo.jp/


  キーワード作成支援ツール
    Google Keyword Planner: https://adwords.google.com/ko/KeywordPlanner/Home


2016年5月27日金曜日

cakephp3 admin prefix routingの罠

PHP Ver 5.6.27
CakePHP Ver 3.1.9


cakephp admin prefix routingの罠
・管理画面を作成する場合などControllerをネストする場合は注意!

http://xxx.com/admin/ はsrc/Controller/{dirName}/xxxxController.phpというような
Controllerを作成するが、この{dirName}が曲者。。。

例えば 'Admin' というような名前でディレクトリを作成した場合
XAMPPを利用した場合等、Windows環境では正しく認識されるが、Linux環境では
ディレクトリ名が小文字の 'admin' としないと動作しない
原因は調べられていないが、ディレクトリ名はすべて小文字にしないといけないらしい

MissingControllerエラーが発生するのだが、そのエラーメッセージでは
src/Controller/Admin/xxxxController.phpを作成しろと言われる
しかし、ディレクトリ名が小文字でないと動作しない
バグなのかな?

相当、はまった・・・

cakephp3 how to add intl module

PHP Ver 5.6.27
CakePHP Ver 3.1.9


ディレクトリ作成
$ mkdir -p local/src
ICUインストール
intlインストール時に必要

$ cd local/src/
$ wget http://download.icu-project.org/files/icu4c/54.1/icu4c-54_1-src.tgz
$ tar xzvf icu4c-54_1-src.tgz
$ cd icu/source/
$ ./configure --prefix=$HOME/local
$ gmake
$ gmake install
intlインストール
$ wget http://pecl.php.net/get/intl-3.0.0.tgz
$ tar xzvf intl-3.0.0.tgz
$ cd intl-3.0.0
$ phpize
$ ./configure --with-icu-dir=$HOME/local
$ make
$ cd ~/local/
$ mkdir php
$ mkdir php/extension
$ cd php/extension/
$ cp ~/local/src/intl-3.0.0/modules/intl.so .
$ php -i | grep intl

make install した方が良いと思う

2016年5月5日木曜日

cakephp mysql tinyintの罠

PHP Ver 5.6.27
CakePHP Ver 3.1.9


cakephp mysql tinyintの罠

・cakephpでmysqlのtinyint型を利用するときは要注意!
tinyint(1)と設定した項目はbool型として認識される。

$this->request->dataでは正しくPOSTされてくる、
しかし、patchEntityをするとbool型になる。
何をやっても結果は一緒・・・

これはbugではないのか?とcakephp側のコードを追う
散々調べた結果、cakephpでのtinyint(1)はvarchar型などのbyteと違い、bitと認識されるらしい
相当、はまった・・・
とりあえず、tableをcreateするときに指定なしでtinyintとすることにした

2016年4月24日日曜日

cakephp3 ページネーション -- Pagination method --

PHP Ver 5.6.27
CakePHP Ver 3.1.9



cakephp3 ページネーション (Cake\View\Helper\PaginatorHelper)


利用できるメソッド一覧

基本的には以下のように利用する。
$this->Paginator->{methodName}

・templates($templates = null)
    $templates = [
        'nextActive' => '< li class="next">< a rel="next" href="{{url}}">{{text}}< /a>< /li>',
        'nextDisabled' => '< li class="next disabled">< a href="" onclick="return false;">{{text}}< /a>< /li>',
        'prevActive' => '< li class="prev">< a rel="prev" href="{{url}}">{{text}}< /a>< /li>',
        'prevDisabled' => '< li class="prev disabled">< a href="" onclick="return false;">{{text}}< /a>< /li>',
        'counterRange' => '{{start}} - {{end}} of {{count}}',
        'counterPages' => '{{page}} of {{pages}}',
        'first' => '< li class="first">< a href="{{url}}">{{text}}< /a>< /li>',
        'last' => '< li class="last">< a href="{{url}}">{{text}}< /a>< /li>',
        'number' => '< li>< a href="{{url}}">{{text}}< /a>< /li>',
        'current' => '< li class="active">< a href="">{{text}}< /a>< /li>',
        'ellipsis' => '< li class="ellipsis">...< /li>',
        'sort' => '< a href="{{url}}">{{text}}< /a>',
        'sortAsc' => '< a class="asc" href="{{url}}">{{text}}< /a>',
        'sortDesc' => '< a class="desc" href="{{url}}">{{text}}< /a>',
        'sortAscLocked' => '< a class="asc locked" href="{{url}}">{{text}}< /a>',
        'sortDescLocked' => '< a class="desc locked" href="{{url}}">{{text}}< /a>',
    ];

・sort($key, $title = null, array $options = [])
    $key(string)
    $title(string)
    $options = [
        'url' => [],
        'model' => 'defaultModel',
        'escape' => true,
    ];

・sortDir($model = null, array $options = [])
    $model = {modelName}
    $options = [
        'url' => [
            'sort' => 'email',
            'direction' => 'desc',
            'page' => 6,
            'lang' => 'en',
        ]
    ];

・sortKey($model = null, array $options = [])
    $key(string)
    $options = [
        'url' => [
            'sort' => 'email',
            'direction' => 'desc',
            'page' => 6,
            'lang' => 'en',
        ]
    ];

・numbers(array $options = [])
    $options = [
        'before' => {numbers},
        'after' => {numbers},
        'model' => 'defaultModel',
        'modulus' => 8,
        'first' => 'First page',
        'last' => 'Last page',
        'templates' => [
            'active' => 'nextActive',
            'disabled' => 'nextDisabled',
        ],
        'url' => [],
    ];

・prev($title = '<< Previous', array $options = [])
    $title(string)
    $options = [
        'disabledTitle' => {title},         'url' => [],
        'model' => 'defaultModel',
        'escape' => true,
        'templates' => [
            'active' => 'nextActive',
            'disabled' => 'nextDisabled',
        ]
    ];

・next($title = 'Next >>', array $options = [])
    $title(string)
    $options = [
        'disabledTitle' => {title},         'url' => [],
        'model' => 'defaultModel',
        'escape' => true,
        'templates' => [
            'active' => 'nextActive',
            'disabled' => 'nextDisabled',
        ]
    ];

・first($first = '<< first', array $options = [])
    $first(string or int)
    $options = [
        'url' => [],
        'model' => 'defaultModel',
        'escape' => true,
    ];

・last($last = 'last >>', array $options = [])
    $last(string or int)
    $options = [
        'url' => [],
        'model' => 'defaultModel',
        'escape' => true,
    ];

・counter($options = [])
    $options = [
        'model' => 'defaultModel', // デフォルトではPaginatorHelper::defaultModelが呼ばれる
        'format' => 'range' or 'pages' or custom
            custom example: 'Page {{page}} of {{pages}}, showing {{current}} records out of
                {{count}} total, starting on record {{start}}, ending on {{end}}'
        ];

・current($model = null)
    $model = {modelName}

・hasNext($model = null)
    $model = {modelName}

・hasPage($model = null, $page = 1)
    $model = {modelName}
    $page = int
・hasPrev($model = null)
    $model = {modelName}

・options(array $options = [])
    $options = [
        'url' => [
            'sort' => 'email',
            'direction' => 'desc',
            'page' => 6,
            'lang' => 'en',
        ]
    ];

・generateUrl(array $options = [], $model = null, $full = false)
    $options = [
        'page' => null,
        'sort' => null,
        'direction' => null,
        'limit' => null,
    ];
    $model = {modelName}
    $full = boolean

・meta(array $options = [])
    $options = [
        'model' => 'defaultModel', // デフォルトではPaginatorHelper::defaultModelが呼ばれる
        'block' => false or {blockName},
    ];

2016年4月22日金曜日

cakephp3 バリデーション(4)
-- validation of cakephp3 --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


Model

・バリデーションを行いたくない場合

$this->newEntity()、$this->patchEntity()を行うとバリデーションが行われてしまうため、
$this->patchEntity($entity, $this->request->data, ['validate' => false] )とすると
バリデーションを行わない。

但し、これ以外にもバリデーションが行われるメソッドがあるので、そこについては要調査

2016年4月14日木曜日

cakephp3 アクセス時のメソッド呼び出し順

PHP Ver 5.6.27
CakePHP Ver 3.1.9



cakephp3 method 呼び出し順


アクセスした場合、以下のように呼び出される

・Controllerのinitialize()
・ComponentのbeforeFilter()
・ControllerのbeforeFilter()
・Componentのstartup()
・Controllerのaction
・ComponentのbeforeRender()
・ControllerのbeforeRender()
・Componentのshutdown()
・ControllerのafterFilter()



その他(Modelで呼ばれるメソッド)

・Model.initialize
・Model.beforeMarshal
・Model.beforeFind
・Model.buildValidator
・Model.buildRules
・Model.beforeRules
・Model.afterRules
・Model.beforeSave
・Model.afterSave
・Model.afterSaveCommit
・Model.beforeDelete
・Model.afterDelete
・Model.afterDeleteCommit

公式HP:http://book.cakephp.org/3.0/ja/orm/saving-data.html

2016年4月13日水曜日

cakephp3 カスタム HTML ヘルパー -- custom html helper --

PHP Ver 5.6.27
CakePHP Ver 3.1.9



cakephp3 カスタムHTMLヘルパーを使う


設定(src/View/AppView.php)

・ここでは例としてCustomHtmlHelperというクラスを作成
initializeメソッドに追記

----------------------
$this->loadHelper('CustomHtml');
----------------------

ここでHelperが付かないことに注意!



クラス作成(src/View/Helper/CustomHtmlHelper.php)

Cake\View\Helperクラスを継承して作成



利用方法(ctpファイルで利用)

$this->CustomHtml->{MethodName}();
で利用可能

2016年4月11日月曜日

cakephp3 DB トランザクション -- DB transaction --

PHP Ver 5.6.27
CakePHP Ver 3.1.9



cakephp3 DB トランザクション


利用方法(※Controllerに記述を行う場合)
== 単一テーブルの登録・更新 ==
・begin
$this->{Model}->connection()->begin();

・commit
$this->{Model}->connection()->commit();

・rollback
$this->{Model}->connection()->rollback();

== 複数テーブルの登録・更新 ==
use Cake\Datasource\ConnectionManager;

$connection = ConnectionManager::get('default');

$connection->begin();

$connection->commit();

$connection->rollback();


ConnectionManagerで指定している「default」は、config/app.phpの「Datasources」で指定しているものになるが、
固定だとdebug機能がうまく使えなくなってしまうので、以下のようにした方が良いと思われる。

$this->loadModel('{Model}');
$connection = ConnectionManager::get($this->{Model}->defaultConnectionName());


Moelクラスに記述するのは、エラー処理などを考えると個人的に嫌いなので割愛

2016年4月8日金曜日

cakephp3 管理画面 ディレクトリ構成変更

PHP Ver 5.6.27
CakePHP Ver 3.1.9



cakephp3 ディレクトリ構成 変更


設定

・config/routes.php
Router::prefix('{prefixName}', function ($routes) {
    $routes->fallbacks('DashedRoute');
});

Router::scope('/{prefixName}', function ($routes) {
    $routes->connect('/', ['controller' => '{controllerName}', 'action' => '{actionName}', 'prefix' => '{prefixName}']);
});


この設定をすることで、URL: http://example.com/{prefixName} で内部的には
src/Controller/{prefixName}/{ControllerName}.php {actionName} メソッドにアクセスしてくれる。

その他の画面用 Controller も src/Controller/{prefixName}/ 配下に作成し、

$this->Html->link(__('View'), ['controller' => '{anotherControllerName}', 'action' => '{anotherActionName}']])

と記述すれば、自動的に http://example.com/{prefixName}/{anotherControllerName}/{anotherActionName} にアクセスしてくれる

2016年4月7日木曜日

cakephp3 Cookie

PHP Ver 5.6.27
CakePHP Ver 3.1.9



cakephp3 Cookieを使う


設定

・App/Controller/AppController.php

    public function initialize()
    {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Cookie'); ←この行を追記
    }


$this->Cookie->config([
    'expires' => '+10 days',
    'path' => '/',
    'domain' => 'localhost',
    'secure' => true,
    'key' => 'Security.salt',
    'httpOnly' => true,
    'encryption' => 'aes'
]);

※詳細については http://book.cakephp.org/3.0/en/controllers/components/cookie.html 参照

利用方法

$this->Cookie->write('cookie_name', 'info');
$this->Cookie->read('cookie_name');
$this->Cookie->delete('cookie_name');

2016年4月5日火曜日

cakephp3 バリデーション(3)
-- validation of cakephp3 --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


バリデーション詳細
数字
// 自然数$validator    ->add('input_param', [        'type' => [            'rule' => 'naturalNumber'        ]    ]);
// 範囲$validator    ->add('input_param', [        'range' => [            'rule' => 'range',            1, // min            100 // max        ]    ]);


文字列


// minlength
$validator    ->add('input_param', [        'minLength' => [            'rule' => 'minLength',            1 // min        ]    ]);


// maxlength
$validator    ->add('input_param', [        'maxLength' => [            'rule' => 'maxLength',            100 // max        ]    ]);

// 範囲

$validator    ->add('input_param', [        'length' => [            'rule' => 'lengthBetween',            1, // min            100 // max        ]    ]);

・ascii・boolean・cc(クレジットカード)・compareWith・comparison・containsNonAlphaNumeric・custom・date・datetime・decimal・email・equalTo・extension・fileSize・geoCoordinate・inList・ip・isInteger・latitude・longitude・luhn・mimeType・money・multiple・notBlank・numeric・time・uploadedFile・uploadError・url・utf8・uuid

cakephp3 バリデーション(2)
-- validation of cakephp3 --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


public function validationDefault(Validator $validator)
{
    // フィールドの存在確認
    $validator
        ->requirePresence('field_name', 'create');
        // 新規作成時のみチェックしたい場合は「create」を指定
        // 更新時のみチェックしたい場合は「update」を指定

    // 空を許可
    $validator
        ->allowEmpty('field_name');

    // 空を認めない
    $validator
        ->notEmpty('field_name', 'error message', 'create');
        // 新規作成時のみチェックしたい場合は「create」を指定
        // 更新時のみチェックしたい場合は「update」を指定

    // フィールドが用意されているか
    $validator
        ->hasField('field_name');

    // フィールドのバリデーションルールを削除
    $validator
        ->remove('field_name');

    // バリデーションクラスを追加する
    $validator
        ->provider('custom', 'App\Model\Validation\CustomValidation');

    // 入力チェック
    $validator
        ->add('field_name', [
            'validation_name' => [
                'rule' => ['lengthBetween', 4, 10],
                'message' => 'Error Message'
            ]
        ]);
    //  指定できるルールについてはCakephp バリデーション (3) 参照
    return $validator;
}

2016年4月4日月曜日

AWS EC2 を使ってWordPressの実行環境を構築してみた(5)
(phpMyAdmin install)

1. phpMyAdminのインストール
$ sudo yum install -y phpMyAdmin
2. phpMyAdmin 初期設定
・バックアップ取得
$ sudo cp -a /etc/httpd/conf.d/phpMyAdmin.{conf,conf.bk}

・phpMyAdmin.confの編集
$ sudo vi /etc/httpd/conf.d/phpMyAdmin.conf
--------------------------------

< Directory /usr/share/phpMyAdmin/ >
AddDefaultCharset UTF-8

< IfModule mod_authz_core.c >
# Apache 2.4
< RequireAny >
# Require ip 127.0.0.1 ←この行をコメントアウト
# Require ip ::1 ←この行をコメントアウト
Require all granted ~
--------------------------------


-- Build a WordPress execution environment using the EC2 --
(phpMyAdmin install)


1. phpMyAdmin install
$ sudo yum install -y phpMyAdmin
2. phpMyAdmin Initial setting
・create buckup
$ sudo cp -a /etc/httpd/conf.d/phpMyAdmin.{conf,conf.bk}

・phpMyAdmin.conf edit
$ sudo vi /etc/httpd/conf.d/phpMyAdmin.conf
--------------------------------

< Directory /usr/share/phpMyAdmin/ >
AddDefaultCharset UTF-8

< IfModule mod_authz_core.c >
# Apache 2.4
< RequireAny >
# Require ip 127.0.0.1 ← comment out line
# Require ip ::1 ← comment out line
Require all granted ~
--------------------------------

2016年3月28日月曜日

AWS EC2 を使ってWordPressの実行環境を構築してみた(4)
(WordPress install)

1. WordPressのインストール
・WordPressの取得
$ sudo wget http://ja.wordpress.org/wordpress-4.3.1-ja.tar.gz

・WordPressの展開
$ sudo tar zxvf wordpress-4.3.1-ja.tar.gz

・DocumentRootへコピー
$ sudo cp -r wordpress /var/www/html/

・権限の変更
$ sudo chown -R apache:apache /var/www/html/wordpress
$ sudo service httpd start
2. 画面を確認

-- Build a WordPress execution environment using the EC2 --
(WordPress install)


1. WordPress install
・Acquisition of WordPress
$ sudo wget http://ja.wordpress.org/wordpress-4.3.1-ja.tar.gz

・WordPress Deployment
$ sudo tar zxvf wordpress-4.3.1-ja.tar.gz

・Copy to the documentRoot
$ sudo cp -r wordpress /var/www/html/

・Authority change
$ sudo chown -R apache:apache /var/www/html/wordpress
$ sudo service httpd start
2. Check the screen

AWS EC2 を使ってWordPressの実行環境を構築してみた(3)
(Apache install)

1. Apacheのインストール
$ sudo yum -y install httpd24 httpd24-devel
2. Apache 初期設定
・自動起動設定 [Automatic start setting]
$ sudo chkconfig httpd on


-- Build a WordPress execution environment using the EC2 --
(Apache install)


1. Apache install
$ sudo yum -y install httpd24 httpd24-devel
2. Apache Initial setting
・Automatic start setting
$ sudo chkconfig httpd on

AWS EC2 を使ってWordPressの実行環境を構築してみた(2)
(MySQL install)

1. MySQLのインストール
$ sudo yum -y install mysql55 mysql55-server mysql55-devel
2. MySQLの初期設定
・自動起動設定
$ sudo chkconfig mysqld on

・バックアップ取得
$ sudo cp -a /etc/my.cnf{,.bk}

・my.cnfの編集
$ sudo vi /etc/my.cnf
--------------------------------
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

character-set-server=utf8 ←この行を追加

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql] ←この行を追加
default-character-set=utf8 ←この行を追加
--------------------------------

$ sudo service mysqld start
$ sudo mysql_secure_installation
3. DB設定
$ sudo mysql -u root -p

mysql> create database db_name;
mysql> grant all privileges on db_name.* to db_user@localhost identified by 'db_pw';
mysql> quit;


-- Build a WordPress execution environment using the EC2 --
(MySQL install)


1. MySQL install
$ sudo yum -y install mysql55 mysql55-server mysql55-devel
2. MYSQL Initial setting
・Automatic start setting
$ sudo chkconfig mysqld on

・create buckup
$ sudo cp -a /etc/my.cnf{,.bk}

・my.cnf edit
$ sudo vi /etc/my.cnf
--------------------------------
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

character-set-server=utf8 ← add line

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql] ← add line
default-character-set=utf8 ← add line
--------------------------------

$ sudo service mysqld start
$ sudo mysql_secure_installation
3. DB setting
$ sudo mysql -u root -p

mysql> create database db_name;
mysql> grant all privileges on db_name.* to db_user@localhost identified by 'db_pw';
mysql> quit;

2016年3月10日木曜日

cakephp3 バリデーション(1)
-- validation of cakephp3 --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


Model

・ここでは例としてModel/Table/userTable.phpというファイルを編集

記述例
public function validationDefault(Validator $validator)
{
    // Cakephp既存バリデーション
    $validator
        // lengthチェック
        ->add('user_name', [
            'length' => [
                'rule' => ['lengthBetween', 4, 10],
                'message' => 'Error Message'
            ]
        ]);


    // 独自バリデーション
    $validator
        ->add('mailaddress', [
            'unique' => [
                'rule' => [$this, 'uniqueMailAddress' ],
                'message' => 'Error Message'
        ]);

    return $validator;
}

public function uniqueMailAddress($value, $context)
{
    // 処理内容
}

2016年3月5日土曜日

cakephp3 でユーザー定義定数ファイルを作成する -- create a user-defined constants file of cakephp3 --

PHP Ver 5.6.27
CakePHP Ver 3.1.9



1. ユーザー定義定数を記載したファイルを作成する

・ここでは例としてconst.phpというファイルを作成
config/const.phpを作成
--------------------------------------
return [
  'Common' => [
    'Valid_User' => 0
  ]
];
--------------------------------------
配列で定義することに注意


2. ユーザー定義定数ファイルを読み込ませる

・ここでは例としてconst.phpというファイルを読み込ませる
config/app.php もしくは config/bootstrap.phpを編集
--------------------------------------
Configure::load('const', 'default'); ← この行を追記
--------------------------------------


3. ユーザー定義定数ファイルを利用する

--------------------------------------
use Cake\Core\Configure; ← この行を追記

Configure::read('Common.Valid_User');
--------------------------------------


1. create a user-defined constants file

・ example: Create a file called const.php
Create a const.php under config directory
--------------------------------------
return [
  'Common' => [
    'Valid_User' => 0
  ]
];
--------------------------------------
Note that defined by the array


2. To read the user-defined constants file

・ example: Read a file called const.php
edit app.php or bootstrap.php
--------------------------------------
Configure::load('const', 'default'); ← add this line
--------------------------------------


3. To use the user-defined constants

--------------------------------------
use Cake\Core\Configure; ← add this line

Configure::read('Common.Valid_User');
--------------------------------------

2016年3月3日木曜日

cakephp3 のデフォルト機能を利用して認証を行う
-- Perform authentication using cakephp3 default auth --

PHP Ver 5.6.27
CakePHP Ver 3.1.9


Cakephp3のAuth機能を利用して管理画面の認証を作ってみた。
意外と手こずったので書き留める。

made manage function using Auth of Cakephp3.
I was struggling. so write down this blog.


1. DBの設定 [DB setting]


・config/app.phpの編集 [app.php edit]
--------------------------------
'Datasources' => [
    'default' => [
        ~
        'username' => 'db_user',
        'password' => 'db_password',
        'database' => 'database_name',
        ~
--------------------------------

・src/Controller/xxxController.phpの編集 [xxxController.php edit]
--------------------------------
public function initialize()
    {
        parent::initialize();

        // auth config
        $this->loadComponent('Auth', [
                'authenticate' => [
                        'Form' => [ // 認証の種類 Form,Basic,Digestが使える。デフォルトはForm
                                'userModel' => 'xxx', // テーブル名
                                'fields' => [ // ユーザー名とパスワードに使うカラムの指定。省略した場合はusernameとpasswordになる
                                        'username' => 'xxxx',
                                        'password' => 'xxxx'],
                                'scope' => [ // その他の条件
                                        'del_flg' => 0
                                ]
                                ]
                        ],
                'loginRedirect' => [ // ログイン後に遷移するアクションを指定
                        'controller' => 'xxx',
                        'action' => 'index'
                ],
                'logoutRedirect' => [ // ログアウト後に遷移するアクションを指定
                        'controller' => 'xxx',
                        'action' => 'login'
                ],
                'loginAction' => [ // ログインしていない場合のアクションを指定
                        'controller' => 'xxx',
                        'action' => 'login'
                ],
                'storage' => 'Session',
                'authError' => 'Did you really think you are allowed to see that?',
                'unauthorizedRedirect' => $this->referer()
        ]);

        $this->Auth->sessionKey = 'Auth.Admin';
    }

    public function login($id = null)
    {
        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            if ($user) {
                $this->Auth->setUser($user);                 $this->Flash->success(__('Admin Login Success'), [
                        'key' => 'auth'
                        ]);
                return $this->redirect($this->Auth->redirectUrl());
            } else {
                $this->Flash->error(__('Username or password is incorrect'), [
                        'key' => 'auth'
                        ]);
            }
        }
    }

    public function logout()
    {
        $this->request->session()->destroy();
        $this->Flash->success(__('Admin Logout Success'));

        return $this->redirect($this->Auth->logout());
    }

    public function beforeFilter(Event $event)
    {
        parent::beforeFilter($event);

        //ログイン無しで表示されるAction
        $this->Auth->allow(['login', 'logout']);
    }
--------------------------------

・src/Template/xxx/login.ctpの作成 [create login.ctp file]
--------------------------------
< ?php
    echo $this->Form->create();
    echo $this->Flash->render('auth');
    echo $this->Form->input('textbox', [
            'label' => 'MailAddress',
            'id' => 'mailaddress',
            'name' => 'mailaddress'
    ]);
    echo $this->Form->input('password', [
            'label' => 'Password',
            'id' => 'password',
            'name' => 'password'
    ]);
    echo $this->Form->button('Login');
    echo $this->form->end();
? >
--------------------------------

※ Entityに_setPasswordというメソッドを作り、以下のように記述すれば
DBに登録する際に暗号化してくれます。

Create a method called _setPassword to Entity.
with encryption when insert to DB.
--------------------------------
use Cake\Auth\DefaultPasswordHasher;

    protected function _setPassword($value) {
        $hasher = new DefaultPasswordHasher();
        return $hasher->hash($value);
    }
--------------------------------

※2 パスワードの長さに気を付けないとLengthが足りなくてもerrorも吐かずに
登録され、ずっと認証されないことになります。
これではまった・・・orz

2016年2月24日水曜日

AWS EC2 を使ってPHP framework laravelの環境を構築

PHPのインストール
MySQLのインストール
Apacheのインストール
1. Composerのインストール

$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

2. laravelのインストール

$ cd /var/www/html/
$ composer create-project laravel/laravel project_name "5.1.*"

3. laravelの日本語化

$ cd /var/www/html/
$ composer require laravel-ja/comja5
$ composer update
$ /home/ec2-user/.composer/vendor/bin/comja5 -a

4. laravel 初期設定

・project_name/config/app.phpの編集
$ sudo vi project_name/config/app.php
--------------------------------
'debug' => env('APP_DEBUG', true),
'url' => 'http://~~~',
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
--------------------------------

・project_name/config/database.phpの編集
$ sudo vi project_name/config/database.php
--------------------------------

'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'database_name'),
'username' => env('DB_USERNAME', 'database_user'),
'password' => env('DB_PASSWORD', 'database_password'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],

--------------------------------

・ディレクトリの権限変更
$ sudo chown -R apache:apache /var/www/html/project_name/storage
$ sudo chmod 775 /var/www/html/project_name/storage

$ sudo chown -R apache:apache /var/www/html/project_name/bootstrap/cache
$ sudo chmod 775 /var/www/html/project_name/bootstrap/cache



Build a laravel of php framework environment using the EC2

PHP install
MySQL install
Apache install
1. Composer install

$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

2. framework laravel install

$ cd /var/www/html/
$ composer create-project laravel/laravel project_name "5.1.*"

3. laravel Localizing Japanese

$ cd /var/www/html/
$ composer require laravel-ja/comja5
$ composer update
$ /home/ec2-user/.composer/vendor/bin/comja5 -a

4. laravel Initial setting

・project_name/config/app.php edit
$ sudo vi project_name/config/app.php
--------------------------------
'debug' => env('APP_DEBUG', true),
'url' => 'http://~~~',
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
--------------------------------

・project_name/config/database.php edit
$ sudo vi project_name/config/database.php
--------------------------------

'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'database_name'),
'username' => env('DB_USERNAME', 'database_user'),
'password' => env('DB_PASSWORD', 'database_password'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],

--------------------------------

・change permissions of directory
$ sudo chown -R apache:apache /var/www/html/project_name/storage
$ sudo chmod 775 /var/www/html/project_name/storage

$ sudo chown -R apache:apache /var/www/html/project_name/bootstrap/cache
$ sudo chmod 775 /var/www/html/project_name/bootstrap/cache

2016年2月23日火曜日

AWS CodeCommitを利用する -- Use AWS CodeCommit --

ソースコード管理にCodeCommitを利用しようと思う。
備忘録として、手順をまとめる。

1. Git for Windows(msysgit) をインストール

・Git for Windowsの取得
https://git-for-windows.github.io
からファイルダウンロードしインストール

2. TortoiseGit をインストール

・TortoiseGitの取得
https://tortoisegit.org/
からファイルダウンロードしインストール

3. キーファイルの作成

・Save private Keyでppkファイル作成(PuttyGenを利用する)
SSH2 RSAを選択し、Generateボタン押下
Key passphraseを入力
Save private Key押下、ppkファイルとして保存

・公開鍵を作成
public key for pasting …の箇所をコピー
codecommit.pubとして保存

4. AWS IAMでユーザ作成

IAMでユーザ作成
アクセスキーIDとシークレットアクセスキーは忘れずに保存すること

作成したユーザを選択

SSHアクセスキーのアップロードを選択
先ほど作成したpubファイルをアップロード

アクセス許可を選択
ポリシーのアタッチを選択
CodeCommitのFullAccessを選択



I think that trying to use the CodeCommit to source code management.
Summarize the procedure.

1. Git for Windows install

・Acquisition of Git for Windows
https://git-for-windows.github.io
donload file and install

2. TortoiseGit install

・Acquisition of TortoiseGit for Windows
https://tortoisegit.org/
donload file and install

3. create key file

・ppk file created by the Save private Key (use PuttyGen)
Select the SSH2 RSA, Generate button is pressed
Enter the Key passphrase
Save private Key pressed, save as ppk file

・Create a public key
Copy the public key for pasting ...
Save as codecommit.pub

4. create user in AWS IAM

create user in AWS IAM
Access key ID and secret access key is stored not forget

Select the created user

Select Upload SSH access key
Upload a pub file you just created

Select permissions
Select to attach policy
Select CodeCommitFullAccess

2016年2月18日木曜日

CakePHP3系環境にBootstrapをinstall(for Windows)

1. Bootstrapのインストール
・Bootstrapの取得
http://getbootstrap.com
からファイルダウンロード

・WebRoot配下に展開
2. BootstrapUIのインストール
・BootstrapUIの取得
https://github.com/FriendsOfCake/bootstrap-ui/
からファイルダウンロード

・pluginsディレクトリにフォルダ名BootstrapUIとして展開
3. JQueryのインストール
・JQueryの取得
http://code.jquery.com
からファイルダウンロード

・webroot/js/jquery配下に展開
4. Bootstrap設定
・config/bootstrap.phpに追記
--------------------------------
Plugin::load('BootstrapUI', ['autoload' => true]);
--------------------------------

・src/View/AppView.phpに追記
--------------------------------
public function initialize()
{
$this->loadHelper('Html', ['className' => 'BootstrapUI.Html']);
$this->loadHelper('Form', ['className' => 'BootstrapUI.Form']);
$this->loadHelper('Flash', ['className' => 'BootstrapUI.Flash']);
$this->loadHelper('Paginator', ['className' => 'BootstrapUI.Paginator']);
}
--------------------------------
5. cake bakeコマンドを使ってファイル作成 (例でAdminクラスを作る)
・コマンドプロンプトで以下のコマンド実行
cd C:\eclipse\xampp\htdocs\bin
cake bake all Admin

以下のファイルが生成される
Controller/AdminController.php
src/Model/Entity/Admin.php
src/Model/Table/AdminTable.php
test/Fixture/AdminFixture.php
test/TestCase/Controller/AdminControllerTest.php
test/TestCase/Model/Table/AdminModelTest.php
6. src/Template/Layout/default.ctpの編集
・追記
$this->prepend('css', $this->Html->css(['bootstrap']));
$this->prepend('script', $this->Html->script(['jquery-2.1.4.js', 'bootstrap']));

・Bootstrap の CSS と衝突を避けるため以下は削除
< ?= $this->Html->css('base.css') ?>
< ?= $this->Html->css('cake.css') ?>
7. 画面を確認

-- Install Bootstrap to CakePHP3 for windows --


1. Bootstrap install
・Acquisition of Bootstrap
http://getbootstrap.com
file download

・Deployment under WebRoot
2. BootstrapUI install
・Acquisition of BootstrapUI
https://github.com/FriendsOfCake/bootstrap-ui/
file download

・Deployment as a folder name BootstrapUI the plugins directory
3. JQuery install
・Acquisition of JQuery
http://code.jquery.com
file download

・Deployment under webroot/js/jquery
4. Bootstrap setting
・Appended to the config/bootstrap.php
--------------------------------
Plugin::load('BootstrapUI', ['autoload' => true]);
--------------------------------

・Appended to the src/View/AppView.php
--------------------------------
public function initialize()
{
$this->loadHelper('Html', ['className' => 'BootstrapUI.Html']);
$this->loadHelper('Form', ['className' => 'BootstrapUI.Form']);
$this->loadHelper('Flash', ['className' => 'BootstrapUI.Flash']);
$this->loadHelper('Paginator', ['className' => 'BootstrapUI.Paginator']);
}
--------------------------------
5. File created using a cake bake command (example:Admin)
・following command at the command prompt
cd C:\eclipse\xampp\htdocs\bin
cake bake all Admin

The following files are generated
Controller/AdminController.php
src/Model/Entity/Admin.php
src/Model/Table/AdminTable.php
test/Fixture/AdminFixture.php
test/TestCase/Controller/AdminControllerTest.php
test/TestCase/Model/Table/AdminModelTest.php
6. edit default.ctp
・Appended
$this->prepend('css', $this->Html->css(['bootstrap']));
$this->prepend('script', $this->Html->script(['jquery-2.1.4.js', 'bootstrap']));

・Delete the following in order to avoid the CSS and the collision of Bootstrap
< ?= $this->Html->css('base.css') ?>
< ?= $this->Html->css('cake.css') ?>
7. Check the screen

2016年2月17日水曜日

AWS EC2 を使ってWordPressの実行環境を構築してみた(1)
(PHPのインストール)

1. PHPのインストール

$ sudo yum -y install php56 php56-mbstring php56-mysqlnd php-pear php56-mcrypt

2. PHP 初期設定

・バックアップ取得
$ sudo cp -a /etc/php.ini{,org}

・PHP.iniの編集
$ sudo vi /etc/php.ini
--------------------------------
date.timezone = "Asia/Tokyo"
--------------------------------



-- Build a WordPress execution environment using the EC2 --
(PHP install)


1. PHP install

$ sudo yum -y install php56 php56-mbstring php56-mysqlnd php-pear php56-mcrypt

2. PHP Initial setting

・create buckup
$ sudo cp -a /etc/php.ini{,org}

・php.ini edit
$ sudo vi /etc/php.ini
--------------------------------
date.timezone = "Asia/Tokyo"
--------------------------------

2016年2月15日月曜日

wixを利用してHPを作成してみた -- Create HP using the Wix --

義父のお手伝いで、去年末にメンタルシアターというカウンセリングを
行うグループのHPをwixを利用して作成した。

GUIが非常に充実していてHTMLを全く知らなくてもHPが作れる。

独自ドメインとっても月額2000円もしないし、こいつは便利かもしれない。


メンタルシアターの紹介。
介護や妊娠で精神的に疲れている方や、何か悩んでいることがある人は一度相談に
行ってもいいかもしれない。
カラーセラピーや音楽療法等もやっているらしい。

Mental Theater
URL:http://www.mth7627.com/
FaceBook:https://www.facebook.com/mth7627/

ブログ作成 -- Start a Blog --

私もブログなるものを始めてみようと思う。

ここは、あくまで個人的に思う事や、私の備忘録的な感じで利用していくつもり。

技術的なことや世の中に思う事を徒然なるままに書き記す。


I think to try I also started a blog while too late.

this blog is intend to use in my memorandum.

Write down that I think the technical things and the society.