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をキャッシュとして使用予定
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
arrived!!
開発環境の構築
MAP用ではなく自分でなんでもいじる用の開発環境を作ります
すでにさくらのVPSがそんな用途なんですが、スペック過多感がすごいので次の契約は継続しない方針で…。
そもそも仕事でも使う必要があったせいで、お金を払う価値はあった物のごちゃごちゃしすぎてしまったのも原因
まあでもVPSがいいよね