2015年11月30日月曜日

CakePHP 3で、メール送信(Email)

CakePHP 3で、メール送信(Email)です。Gmailからメール送信する例。

config/app.php
'EmailTransport' => [
  'default' => [
    'host' => 'ssl://smtp.gmail.com',
    'port' => 465,
    'username' => 'yourname@gmail.com',
    'password' => 'password',
    'className' => 'Smtp'
  ],
],
src/Controller/PagesController.php
$email = new Email('default');
$email->from(['yourname@gmail.com']' => 'サイト名')
  ->to('receiver@gmail.com')
  ->subject('件名')
  ->send('本文です。');

実際に設定してみたサイトがこちら

参考サイト
Email (CakePHP Cookbook 3.x documentation)

2015年11月29日日曜日

ホームページやブログが無料で簡単に立ち上げられる「Ameba Ownd」

ホームページやブログが無料で簡単に立ち上げられる「Ameba Ownd」 アメーバブログの後継になるサービスなのでしょうか。何が素晴らしいって、デザインが綺麗で良いです。スマホ対応ですし、使い勝手も洗練されていて、ヒットの予感?

2015年11月28日土曜日

PHP 7.0は、HHVM 3.10より高速

PHP 7.0は、HHVM 3.10より高速とのこと。今回試されたベンチマークの結果では、PHP 7.0が、すべての項目でHHVMの実行速度を上回っているそうです。リリース間近ということで、期待してしまいますね。



参考サイト
PHP 7.0、HHVM 3.10より高速(マイナビニュース)
PHP 7のパフォーマンスが高い理由(CodeZine)

2015年11月27日金曜日

CakePHP 3で、カスタムログイン

CakePHP 3で、カスタムログインです。scopeを利用したら、動いたような感じ? 追加したのは「'scope' => ['Users.active' => 1]」の部分。間違っているかもしれません。

利用しているのはCakePHP 3.1.3なので、finderオプションでいけるはずなんですが、設定しきれませんでした。

src/Controller/AppController.php
$this->loadComponent('Auth', [
  'authenticate' => [
    'Form' => [
      'fields' => [
        'username' => 'email',
        'password' => 'password'
      ],
      'scope' => ['Users.active' => 1]
    ]
  ],
  'loginAction' => [
    'controller' => 'Users',
    'action' => 'login'
  ]
]);

実際に設定してみたサイトがこちら

参考サイト
Authentication(CakePHP Cookbook 3.x documentation)
Class Cake\Auth\FormAuthenticate(CakePHP)

2015年11月26日木曜日

CakePHP 3で、カスタムログイン挫折

CakePHP 3で、カスタムログイン挫折です。 ダメ、なんだかわからない。 どこでデバックできるのかわからない。 CakePHPを使っていることが、苦痛になってきました。コピーしてるだけなのに、なんで動かないんだろう?

ストレス発散の、意味のないブログです。すみません。

src/Controller/AppController.php?
public function initialize()
{
  parent::initialize();
  $this->loadComponent('Auth', [
    'authenticate' => [
      'Form' => [
        'finder' => 'auth'
      ]
    ],
  ]);
}
src/Model/Table/UsersTable.php?
public function findAuth(\Cake\ORM\Query $query, array $options)
{
  $query
    ->select(['id', 'username', 'password'])
    ->where(['Users.active' => 1]);

  return $query;
}

実際に設定してみたサイトがこちら

参考サイト
Authentication(CakePHP Cookbook 3.x documentation)

2015年11月25日水曜日

CakePHP 3で、ビュー(View)のテンプレートでログイン情報を取得

CakePHP 3で、ビュー(View)のテンプレートでログイン情報を取得です。

$this->request->session()->read('Auth.User.id');

で、ユーザーのIDが取得できます。

src/Template/Layout/default.ctp
<?php if ($this->request->session()->read('Auth.User.id')): ?>
  <a href="/users/logout/">ログアウト</a>
<?php endif; ?>

実際に設定してみたサイトがこちら

参考サイト
CakePHP check if user is logged in inside a view(Stack Overflow)

2015年11月24日火曜日

CakePHP 3で、デバック(Debugger)

CakePHP 3で、デバック(Debugger)です。便利に使えます。

src/Controller/PagesController.php
use Cake\Error\Debugger;

Debugger::dump($data);

pr(Debugger::trace());

実際に設定してみたサイトがこちら

参考サイト
Debugging (CakePHP Cookbook 3.x documentation)
Class 'App\Controller\Debugger' not found error with cakephp ver3(Stack Overflow)

2015年11月23日月曜日

Nginx拡張の高速なWebアプリサーバ「OpenResty」

Nginx拡張の高速なWebアプリサーバ「OpenResty」 パフォーマンス重視のサーバーで利用しているのを見かけて、興味をそそられたのでメモ。
OpenRestyは、Nginxの優れた設計モジュールを利用することで、ウェブ開発者が、Luaのようなプログラミング言語のを使用して、効果的に、強力なウェブアプリケーションサーバーを構築することができます。


参考サイト
Lua
Nginx + Lua から MySQL を使う(昼メシ物語さん)
Nginx(OpenResty)でLuaを動かす+パフォーマンス(ついでにHHVMも) (ゆっくり備忘録さん)

2015年11月22日日曜日

コンビニのファミリーマートでSIMカード販売

コンビニのファミリーマートSIMカード販売とのこと。月額のSIMカードの販売はよくある(?)として、プリペイド形式でのサービス提供は、面白いなと思いました。気軽に利用できますし、いろいろなニーズが掘り起こされるのではないでしょうか。



参考サイト
えらべるSIMカード(FamilyMart)

2015年11月21日土曜日

無料のLinux講座(東京品川 2015年12月12日)

株式会社VSNさんの、無料のLinux講座を発見です! 2015年12月12日、場所は東京品川。かなり実践的な内容のようです。

CentOS7から実装されたSystemdや利用が推奨されたNetworkManagerというプログラムが提供している様々な機能を「サービス管理」、「ログ管理」と「ネットワーク管理」という3つの役割に分類し、それら一つひとつの役割を実機を用いながら前バージョンであるCentOS6と比較することで、CentOS7の3つの役割を理解しましょう。



参考サイト
Linux無料講座のご案内(株式会社VSN)

2015年11月20日金曜日

CakePHP 3でURLやメールの自動リンクと文字列切り取り

CakePHP 3でURLやメールの自動リンクと文字列切り取りです。その他、テキスト関連の処理がいろいろと用意されています。かなり高機能。便利です。

// 自動リンク
$this->Text->autoLink($myText);

// 段落、改行
$this->Text->autoParagraph($myText);

// 文字列切り取り
$this->Text->truncate($myText, 20,['ellipsis' => '...','exact' => false]);

実際に設定してみたサイトがこちら

参考サイト
Text(CakePHP Cookbook 3.x documentation)

2015年11月19日木曜日

CakePHP 3で数字のフォーマット

CakePHP 3数字のフォーマットです。CakePHPの機能を使わなくても実現できると思いますが、せっかくなので使ってみました。

echo $this->Number->currency(2980, "JPY");

echo $this->Number->precision(456.91873645, 2);

echo $this->Number->toReadableSize(0); // 0 Byte
echo $this->Number->toReadableSize(1024); // 1 KB
echo $this->Number->toReadableSize(1321205.76); // 1.26 MB
echo $this->Number->toReadableSize(5368709120); // 5 GB

echo $this->Number->format('123456.7890', [
  'places' => 2,
  'before' => '¥ ',
  'after' => ' !'
]);

実際に設定してみたサイトがこちら

参考サイト
Number (CakePHP Cookbook 3.x documentation)

2015年11月18日水曜日

CakePHP 3でログの設定

CakePHP 3ログの設定です。行き詰まったら、ログを確認してみると良いかもしれません。初歩的なミスが原因で悶々としていましたが、救われました(笑)。

config/app.php
'Log' => [
  'debug' => [
    'className' => 'Cake\Log\Engine\FileLog',
    'path' => LOGS,
    'file' => 'debug',
    'levels' => ['notice', 'info', 'debug'],
  ],
  'error' => [
    'className' => 'Cake\Log\Engine\FileLog',
    'path' => LOGS,
    'file' => 'error',
    'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
  ],
],
logs/debug.log
logs/error.log
にそれぞれ、記録されます。

他に、Monologなども利用することが可能です。

コントローラー内からログを出力する場合は、下記の通り。

src/Controller/PagesController.php
$this->log("Something didn't work!");
$this->log("This is a debug log!", "debug");

実際に設定してみたサイトがこちら

参考サイト
Logging (CakePHP Cookbook 3.x documentation)

2015年11月17日火曜日

CakePHP 3でFormHelper

CakePHP 3FormHelperです。FormHelperのTemplatesを設定変更することで、class属性の出力などいろいろカスタマイズできるらしい。複雑過ぎです。

src/Template/Articles/add.ctp
<?php
  // テンプレート設定
  $this->Form->templates([
    'inputContainer' => '<div class="row"><div class="controls">{{content}}</div></div>',
    'inputContainerError' => '<div class="row"><div class="controls">{{content}}</div><div class="danger">{{error}}</div></div>',
  ]);

  // フォーム開始
  echo $this->Form->create($article, ['class' => 'form']);

  // タイトル
  echo $this->Form->input('title', [
  'label' => [
    'class' => 'label',
    'text' => 'タイトル'
  ],
  'placeholder'=>'タイトル',
  'class' => 'width-100']);

  // 本文
  echo $this->Form->input('body', ['cols' => '100', 'rows' => '10', 
  'label' => [
    'class' => 'label',
    'text' => '本文'
  ],
  'placeholder'=>'本文',
  'class' => 'width-100']);
?>
<div class="row">
<?php
  // 保存ボタン
  echo $this->Form->button(__('保存'), ['class' => 'button button-primary']);
?>
</div>
<?php
  // フォーム終了
  echo $this->Form->end();
?>

実際に設定してみたサイトがこちら

参考サイト
Form(CakePHP Cookbook 3.x documentation)
Customizing CakePHP 3 Form Helper(Chris Nizzardiniさん)

2015年11月16日月曜日

CakePHP 3でHtmlHelper

CakePHP 3HtmlHelperです。慣れれば、なんとかなるでしょう。

画像のリンク
<?= $this->Html->image('http://cakephp.org/img/cake-logo.png', [
  'alt' => 'cake-logo',
  'url' => ['controller' => 'Articles', 'action' => 'index']
]);?>
ループとリンク、日付のフォーマット
<? foreach ($articles as $key => $article) { ?>
 <h3><?= $this->Html->link($article->title, ['action' => 'view', $article->id]); ?></h3>
 <p><?= $article->created->format('Y-m-d H:i'); ?></p>
<? } ?>
リンクに「class」や「confirm」を追加
<?= $this->Html->link('編集', ['action' => 'edit', $article->id], ['class' => 'button']) ?>
<?= $this->Html->link('削除', ['action' => 'delete', $article->id], ['class' => 'button', 'confirm' => '本当に削除してよろしいですか?']) ?>

実際に設定してみたサイトがこちら

参考サイト
Html(CakePHP Cookbook 3.x documentation)

2015年11月15日日曜日

Unixのウェブサーバー「Hiawatha」

Unixのウェブサーバー「Hiawatha」 「advanced and secure webserver for Unix」と謳われています。Linuxでも利用できるようです。興味をそそられますね。とにかくメモ。



参考サイト
hiawatha Webサーバーを試してみた。 (Puppy Linux)(自宅サーバーWebRingさん)
Install Hiawatha Web Server with PHP-FPM and MySQL on Debian(Vultr.com)

2015年11月14日土曜日

Microsoft AzureでRed Hat Enterprise Linux(RHEL)が利用可能に

Microsoft AzureRed Hat Enterprise Linux(RHEL)が利用可能になるそうです。Linuxをサポートしているわけですから、当然の流れではあると思いますが、それでも驚きです。Microsoftの本気度を見た気がします。



参考サイト
米Microsoftと米Red Hatが提携、Azure上でRHELが利用可能に(ITpro)

2015年11月13日金曜日

CakePHP 3でフラッシュメッセージの表示

CakePHP 3でフラッシュメッセージの表示です。

src/Controller/PagesController.php
public function display()
{
  $this->Flash->success('いらっしゃい!');
  $this->Flash->default('ハロー');
  $this->Flash->error('ダメダメ');
}
src/Template/Layout/default.ctp
<?= $this->Flash->render() ?>
HTMLレイアウトは、
src/Template/Element/Flash/default.ctp
src/Template/Element/Flash/error.ctp
src/Template/Element/Flash/success.ctp
を編集すればOKらしい。

実際に設定してみたサイトがこちら

参考サイト
Flash(CakePHP Cookbook 3.x documentation)

2015年11月12日木曜日

CakePHP 3でSmartyを設定するも、挫折

CakePHP 3Smartyを設定するも、挫折しました。使い方がよくわからない。ガックリ。CakePHPのビューテンプレートを利用して、また一から出直します。笑ってやってください。

実際に設定してみたサイトがこちら

振り出しに戻りました。無残な状態に。。。

2015年11月11日水曜日

CakePHP 3でデータの削除

CakePHP 3データの削除です。GETリクエストを使用して削除を許可すると、ウェブクローラが誤ってコンテンツを削除する可能性があるので、危険ですと説明されています。というわけで、allowMethodで、postを指定しています。getなどでアクセスされた場合は、MethodNotAllowedException が投げられます。

src/Controller/ArticlesController.php
public function delete($id)
{
  // POSTメソッドのみを許可
  $this->request->allowMethod(['post']);

  // $idからエンティティーを取得。データがなければ、NotFoundExceptionが投げられる。
  $article = $this->Articles->get($id);

  // 削除成功
  if ($this->Articles->delete($article)) {
    $this->Flash->success(__('削除されました。'));
    return $this->redirect(['action' => 'index']);
  }
}

実際に設定してみたサイトがこちら

参考サイト
Blog Tutorial - Part 2 CakePHP Cookbook 3.x documentation)

2015年11月10日火曜日

CakePHP 3でデータの更新

CakePHP 3でデータの更新です。新規作成(insert)と更新(update)の違いは、エンティティーの状態の違いによるもの。

新規作成(insert)
$article = $this->Articles->newEntity();

更新(update)
$article = $this->Articles->get($id);

src/Controller/ArticlesController.php
public function edit($id = null)
{
  // $idからエンティティーを取得。データがなければ、NotFoundExceptionが投げられる。
  $article = $this->Articles->get($id);

  // POSTメソッドでアクセスされた場合
  if ($this->request->is(['post'])) {

    // POSTされたリクエストデータを、バリデーションして、エンティティーにマージ
    $this->Articles->patchEntity($article, $this->request->data);

    // 保存成功
    if ($this->Articles->save($article)) {
      $this->Flash->success(__('変更されました。'));

      // リダイレクト
      return $this->redirect(['action' => 'index']);
    }
    // 保存失敗
    $this->Flash->error(__('変更できませんでした。'));
  }

  $this->set('article', $article);
}

実際に設定してみたサイトがこちら

参考サイト
Blog Tutorial - Part 2 CakePHP Cookbook 3.x documentation)

2015年11月9日月曜日

CakePHP 3でデータのバリデーション

CakePHP 3データのバリデーションです。save() メソッドが呼ばれると、validationDefault() が結果を返すらしい。

src/Model/Table/ArticlesTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class ArticlesTable extends Table
{
  public function initialize(array $config)
  {
    $this->addBehavior('Timestamp');
  }

  public function validationDefault(Validator $validator)
  {
    $validator
      ->notEmpty('title', '記入してください。')
      ->requirePresence('title')
      ->add('title', [
        'length' => [
          'rule' => ['minLength', 10],
          'message' => '10文字以上で記入してください。',
        ]
      ])
      ->notEmpty('body', '記入してください。')
      ->requirePresence('body')
      ->add('body', [
        'length' => [
          'rule' => ['minLength', 20],
          'message' => '20文字以上で記入してください。',
        ]
      ]);

    return $validator;
  }
}

実際に設定してみたサイトがこちら

参考サイト
Blog Tutorial - Part 2(CakePHP Cookbook 3.x documentation)
Validation(CakePHP Cookbook 3.x documentation)

2015年11月8日日曜日

新たな選択肢、Webブラウザーの「Vivaldi」

新たな選択肢、Webブラウザーの「Vivaldi」を試してみました。軽快な動作で、なかなかいいです。まだ、ベータ版ではありますが、日本語環境も充実していますし、よく出来ていると思います。気に入りました。



参考サイト
Webブラウザー「Vivaldi」、初めてのベータ版をリリース(窓の杜)

2015年11月7日土曜日

Fedora 23がリリース

Fedora 23がリリースされました。Workstation、Server、Cloudと3種類用意されています。



Workstationの操作性を紹介したビデオ


参考サイト
Fedora 23登場(マイナビニュース)

2015年11月6日金曜日

CakePHP 3でトップページへのルーティング

CakePHP 3トップページへのルーティングです。「'home'」の部分は名前付きルーティング (Named routes)かと思っていましたが、ビューのテンプレート名を指定しています。名前付きルーティングは、

['_name' => 'home']

という具合に設定するようです。

config/routes.php
use Cake\Core\Plugin;
use Cake\Routing\Router;
Router::defaultRouteClass('DashedRoute');
Router::scope('/', function ($routes) {
  // コントローラーがPagesController.php
  // アクションがdisplay()
  // ビューがhome.ctp
  $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home'], ['_name' => 'home']);
});

実際に設定してみたサイトがこちら

参考サイト
Blog Tutorial - Part 2(CakePHP Cookbook 3.x documentation)
Routing(CakePHP Cookbook 3.x documentation)

2015年11月5日木曜日

CakePHP 3でデータのインサート

CakePHP 3データのインサートです。保存はできるのですが、Smarty側でのエラーの拾い方がわからない。何もわかっちゃいないのに、調子の乗って設定するべきではなかったかも。

src/Controller/ArticlesController.php
namespace App\Controller;
use App\Controller\AppController;
class ArticlesController extends AppController
{
  public function add()
  {
    // エンティティーを生成
    $article = $this->Articles->newEntity();

    // POSTメソッドでアクセスされた場合
    if ($this->request->is('post')) {

      // POSTされたリクエストデータを、バリデーションして、エンティティーにマージ
      $article = $this->Articles->patchEntity($article, $this->request->data);

      // 保存成功
      if ($this->Articles->save($article)) {
        $this->Flash->success(__('保存されました。'));

        // リダイレクト
        return $this->redirect(['action' => 'index']);
      }

      // 保存失敗
      $this->Flash->error(__('保存できませんでした。'));
    }
    $this->set('article', $article);
  }
}

実際に設定してみたサイトがこちら

参考サイト
Saving Data (CakePHP Cookbook 3.x documentation)

2015年11月4日水曜日

CakePHP 3でエラーページのカスタマイズ

CakePHP 3エラーページのカスタマイズです。本当は、Smartyでエラー出力も制御したかったのですが、挫折しました。というわけで、下記の3つのテンプレートを変更すれば、エラーページのデザインは変更できます。

src/Template/Layout/default.ctp
src/Template/Error/error400.ctp
src/Template/Error/error500.ctp


実際に設定してみたサイトがこちら

参考サイト
Error & Exception Handling(CakePHP Cookbook 3.x documentation)

2015年11月3日火曜日

Node.js 5.0がリリース

Node.js 5.0がリリースさえたとのこと。長期サポート版のLTSではないため、安定性を求める場合は、Node.js v4.2.xへの移行が推奨されるそうです。



参考サイト
Node.js v5.0.0がリリース、サポート期間はv6がリリースされる2016年4月まで(CodeZine)

2015年11月2日月曜日

CakePHP 3のORMで、プライマリーキーによる単一エンティティーデータの取得「get()」

CakePHP 3のORMで、プライマリーキーによる単一エンティティーデータの取得「get()」です。データが見つからない場合、NotFoundExceptionが返るらしい。

get($id, $options =[])

オプションには、検索条件以外に、キャッシュなども設定できる模様。

src/Controller/ArticlesController.php
namespace App\Controller;
class ArticlesController extends AppController
{
  public function view($id = null)
  {
    $article = $this->Articles->get($id);
    $this->set(compact('article'));
  }
}

実際に設定してみたサイトがこちら

参考サイト
Retrieving Data & Results Sets(CakePHP Cookbook 3.x documentation)

2015年11月1日日曜日

JavaScriptフレームワーク「Vue.js 1.0」がリリース

JavaScriptフレームワーク「Vue.js 1.0」がリリースされました。ガイドに用意されている「他のフレームワークとの比較」を読むと、どんなものか理解しやすいかもしれません。

Vue.js は、API そして設計の両方の点から、Angular と比べて全体にとてもシンプルです。学習効率が非常に高いと言えます。



参考サイト
WebインターフェースのためのJavaScriptフレームワーク「Vue.js 1.0.0」がリリース(CodeZine)