Laravel4 カスタムValidator

カスタムValidatorの実装方法
少しだけ苦戦したのでメモ

ここでは試しにmb_strlenでの文字列長のバリデーター「mb_digits_between」を作る

<?php

class Hoge extends BaseController {
    public function hoge()
    {
        $input = Input::all();
        $rules = array(
            'name'   => 'required|mb_digits_between:1,100',
        );
        $validator = Validator::make($input, $rules);
        if ($validator->fails()) {
            
        }

こんな感じで呼び出したいよね。

まずバリデーションの内容を書くファイルを準備
ファイル名と場所・メソッド名は適当
app/extension/CustomValidator.php

<?php

namespace App\Extension;

class CustomValidator extends \Illuminate\Validation\Validator
{
    public function validateMbDigitsBetween($attribute, $value, $parameters)
    {
        $this->requireParameterCount(2, $parameters, 'mb_digits_between');
        $len = mb_strlen($value);
        return $len >= $parameters[0] && $len <= $parameters[1];
    }

    protected function replaceMbDigitsBetween($message, $attribute, $rule, $parameters)
    {
        return str_replace(array(':min', ':max'), $parameters, $message);
    }
}

こういうのを作っておく
validateXxxxメソッドがバリデーター
replaceXxxxメソッドはエラーのメッセージなど用
エラーメッセージで:min :maxを使わないのであれば不要
(エラーメッセージはapp/lang/en/validation.phpなどを参照)

app/filters.php

<?php
...

Validator::resolver(function($translator, $data, $rules, $messages)
{
    return new \App\Extension\CustomValidator($translator, $data, $rules, $messages);
});

上の文を追加。
filters.phpに追加したけど、このファイル自体は
app/start/global.phpの最下部で読まれているので、同じように読み込むファイルを作ってそれに記述すれば動くような気がする。
というかそっちの方がいい気がするけど、めんどくさがるダメ人間

http://laravel.com/docs/validation#custom-validation-rules
ここに書いてあると言えば書いてあるんだけど、わかりにくい…。

開発環境の構築2(nginx+PHP(FastCGI)+Laravel)

アプリケーションの類いを入れる

とりあえずPHPの動くwebサーバー立てようぜ!という感じ
気分的にnginx+PHP(FastCGI)+Laravelが動くまで

nginx

どうせアクセス来ないしapacheでもいいんだけど、手元にある本がnginxのみなのでこちらに
相変わらずapt-getで最新が取れないようなので
http://wiki.nginx.org/Install

$ sudo -s
# nginx=stable # use nginx=development for latest development version
# add-apt-repository ppa:nginx/$nginx
# apt-get update 
# apt-get install nginx
# nginx -v
nginx version: nginx/1.4.7

にあるままに実行

MySQL
$ sudo apt-get install mysql-server mysql-client -y
$ sudo mysql_secure_installation

mysql_secure_installationなんて物があるんですね。最低限の設定でしょうけど。
5.5.35が入った
文字コードくらいは先に設定した方がよさげ(追記)

$ sudo vim /etc/mysql/my.cnf
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
PHP

nginxとPHPを一緒に使うのは初めてだけど、fpmってのを入れれば良いのかしら?

$ sudo apt-get install php5-fpm php5-cli php5-mysql php5-json php5-curl php5mcrypt php5-memcached -y

5.5.3が入った模様
php5-json php5-curl php5mcryptは入れようかなーと考えているlaravelで必要
php5-memcachedをキャッシュとして使用予定

memcached
$ sudo apt-get install memcached
$ sudo vi /etc/memcached.conf

とりあえず設定は無しでいいや

laravel

確定ではないけどフレームワークとしてlaravelを入れてみる
Laravel - The PHP framework for web artisans.

$ wget http://laravel.com/laravel.phar
$ sudo mv laravel.phar /usr/local/bin/laravel
$ sudo chmod 755 /usr/local/bin/laravel

適当なディレクトリで

$ laravel new hoge
$ cd hoge
$ chmod 777 -R app/storage
$ vi app/config/app.php
localとかtimezonの設定
nginx設定 for laravel

/etc/nginx/conf.d/に入れればいいのか?

$ vim hoge.conf
  1 server {
  2     listen 80;
  3     server_name doujin-ongaku.jp;
  4
  5     access_log /var/log/nginx/doujin-map.access.log;
  6     error_log /var/log/nginx/doujin-map.error.log;
  7
  8     root /var/www/hoge/public;
  9
 10     location / {
 11         index index.php;
 12         try_files $uri $uri/ /index.php?$query_string;
 13     }
 14
 15     location ~ \.php$ {
 16         fastcgi_pass unix:/var/run/php5-fpm.sock;
 17         fastcgi_index  index.php;
 18         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 19         include   /etc/nginx/fastcgi_params;
 20     }
 21 }

fastcgi_passの項目は「127.0.0.1:9000」になってる情報もあったけど、
/etc/php5/fpm/pool.d/www.conf の listen の設定次第の模様
どっちがいいか、みたいのもあるっぽいけどとりあえず動く方で
(よく分からない設定を変えたくないだけ)

動作

hostsを設定してドメインに飛んでみると…

Mcrypt PHP extension required.」

入れたやん!さっき入れたやん!

$ php -m
[PHP Modules]
...
iconv
json
libxml
mbstring
mhash
mysql
mysqli
...

無い・・・?

解決方法↓
Can't use PHP extension Mcrypt in Ubuntu 13.10 (Nginx, PHP-FPM) - Ask Ubuntu
Ubuntu13.10だと起きる感じっぽい

$ sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/mcrypt.ini
$ sudo php5enmod mcrypt
$ sudo service php5-fpm restart

f:id:miyawa:20140419123917p:plain
arrived!!

開発環境の構築

MAP用ではなく自分でなんでもいじる用の開発環境を作ります
すでにさくらのVPSがそんな用途なんですが、スペック過多感がすごいので次の契約は継続しない方針で…。
そもそも仕事でも使う必要があったせいで、お金を払う価値はあった物のごちゃごちゃしすぎてしまったのも原因
まあでもVPSがいいよね

Digital Ocean

使うのはVPSとしては最近よく聞く?DigitalOcean
ここのプロモコードを得るために半月構築開始が遅れましたw

linodeは前に作ろうとしたら初めのイメージを入れるときに失敗してから使う気が起きません。
ConoHaたんとかさくらはちょい高いですね

ぶっちゃけDigitalOcean使ったことありますけど、前に普通に何時間か落ちたし、日本にないためか普通に初めの接続遅いです
アジアということでシンガポールに期待しましたが遅いです。

やったこと

VPSはroot権限渡されて終わりなので始めの設定が面倒ですね
初めて触ったときは、一から組み立てる楽しさがありましたが・・・

  1. apt-get updateみたいの
  2. ユーザー作成とパスワード変更 sudo権限
  3. ログイン用鍵の登録
  4. sshd周りの変更(ポートの変更・パスワードログイン不可・Rootログイン不可など)
  5. Timezoneの変更 sudo dpkg-reconfigure tzdata
  6. .vimrc .screenrc .bashrc .inputrcとかをいじる(というか持ってくる)

基本設定はこんなもんですかね?
やべぇCentOSの方が慣れてる…。

ここで力尽きる

同人音楽MAPの改修

お久しぶりです。
エンジニアっぽいことからしばらく離れ、その後少しkinectと戯れてました。
漸くやる気が1年ぶりくらいに帰ってきたので、そのやる気を書いていきたいと思います。

続きを読む