ラベル laravel5 の投稿を表示しています。 すべての投稿を表示
ラベル laravel5 の投稿を表示しています。 すべての投稿を表示

2015年6月14日日曜日

Laravel5と郵便番号用ajaxのajaxzip3.js

Laravel5でちょっとしたWebシステムを開発することになった。ちなみに、2014年10月ごろにはLaravel4でWebシステムを開発した。Laravel4とLaravel5はフォルダの配置とデフォルトの設定が随分変わったので、最初かなり戸惑った。
 それはさて置き、 ajaxzip3.jsと郵便番号の話です。フォームに郵便番号を入れると住所欄に住所が入るWEBページがよくあります。自分で作らなければいけないと思い、日本郵便のページから郵便番号のファイルをダウンロードして、簡単なプログラムを書いて、郵便番号のデータをMySQLに取り込んだ。

<2015/6/14追加>
Google Codeがサービス廃止になり、Githubに移行したそうです。私のページも動かなくなったので驚きましたが、理由が分かれば、安心。
Github移行を機にこれまでhttp、httpsで分かれていたURLを一本化したそうです。
今後は、https://ajaxzip3.github.io/ajaxzip3.js に成ります。(http://でも使えるみたいですが、基本はhttps://です。)
今までは、http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.js だった。下記の部分もこの部分は読み替えてください。書き換えてください。

その後Javascriptの見本が見たくて、Googleで検索したら、ajaxzip3 と言う、驚異的なページを見つけてしまった。  ajaxzip3.jsを使えば、もう自分で郵便番号を用意する必要はない。ホームページに書くコードも至極簡単だ。ヘッダーの中で下記:
http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.jsを読み込み。
本文のフォームの中に下記のように書く(私が書いたコードで、余分に、class="eisu"とtype="tel"で英数字化、placeholder="453"でグレーの初期値表示、onKeyPress="return submitStop(event)で改行キーでの送信の拒否、を入れている)。データベースを3桁4桁にしているので、入力用フォームも3桁4桁に分けている。
<td>
<input class="eisu" maxlength="3" placeholder="453" onKeyPress="return submitStop(event);" name="zip21" type="tel" value="">
</td><td>
<input class="eisu" maxlength="4" placeholder="0042" onKeyUp="AjaxZip3.zip2addr(zip21,zip22,addr21,addr21);" onKeyPress="return submitStop(event);" name="zip22" type="tel" value="">
</td>
ajaxzip3の動作見本ページはここです。

ajaxzip3のURLを見ると、https://code.google.com/p/ajaxzip3/と、google.comのドメインになっている。ajaxzip3.jsの設置場所も、googlecode.comになっている。Google Project Hostingというページで、オープンソースをGoogleが応援しているようだ。Googleがこのようなことを行っているのははじめて知った。(上に追加で記したように、Google Codeはサービス廃止だそうです。)


2015年4月26日日曜日

Laravel5で複数チェックボックスのバリデーションを行う、required_without_all

Laravel5で開発中に、複数checkboxのvalidationが必要になった。少なくとも一つにチェックをつけているかどうかをバリデーションすることになった。

Laravel5には、そのためピタリなValidation ruleがある。hoge required_without_all:foo,bar,...というvalidation ruleがそれだ。hogeは、hoge以外のcheckboxが全て未チェックなら、チェックされなくてはならない。それは、つまり、少なくとも一つがチェックされていなければならないことと同じになる。

複数checkboxをvalidateするための、Request.php、Controller.php、test.blade.php、testconfirm.blade.phpの実例をご紹介します。

test.blade.php
{!! Form::checkbox('service0', '人間', null) !!}人間<br>
{!! Form::checkbox('service1', 'チンパンジー', null) !!}チンパンジー<br>
{!! Form::checkbox('service2', 'ゴリラ', null) !!}ゴリラ<br>
{!! Form::checkbox('service3', 'オランウータン', null) !!}オランウータン<br>

testconfirm.blade.php
{{ Input::get('service0') }}{!! Form::hidden('service0', Input::get('service0')) !!}
{{ Input::get('service1') }}{!! Form::hidden('service1', Input::get('service1')) !!}
{{ Input::get('service2') }}{!! Form::hidden('service2', Input::get('service2')) !!}
{{ Input::get('service3') }}{!! Form::hidden('service3', Input::get('service3')) !!}
// 戻るボタンで戻ったときに入力値を維持しているようにしている

Request.php
public static function rules() {
    return [
        'service0'=>'required_without_all:service1,service2,service3',
        'zip21'=>'required',
        'zip22'=>'required',
        'addr21'=>'required',
        'name'=>'required',
        'email'=>'required|email|confirmed',
        'content'=>'required'
    ];
}

Controller.php
// checkboxのチェックされなかった項目の特別な処理をする。 入力後、内容はメール送信している。
if(isset($input['service0'])){
    Session::put('service0', $input['service0']);
}else{
    Session::put('service0', '');
}

if(isset($input['service1'])){
    Session::put('service1', $input['service1']);
}else{
    Session::put('service1', '');
}

if(isset($input['service2'])){
    Session::put('service2', $input['service2']);
}else{
    Session::put('service2', '');
}

if(isset($input['service3'])){
    Session::put('service3', $input['service3']);
}else{
    Session::put('service3', '');
}


Laravel5のマニュアル http://laravel.com/docs/5.0/validation#available-validation-rules
 

2015年4月18日土曜日

PHP filter_var関数を使って、ログインをメールでもIDでも可能にする(Laravel5での開発で)

Laravel5で社内のシステムを開発するときに、ログインをメールアドレスでもIDでも出来るようにしたかった。そのとき使ったのが、filter_var関数。フィルタにFILTER_VALIDATE_EMAILを使えば簡単なスクリプトで、メールアドレスでもIDでもログインできるようになる。(ほとんど無いと思うけど特殊なメールアドレスには対応できません)

filter_var関数は、PHP5で使える関数で、指定したフィルタでデータをフィルタリング出来る。フィルタは、例えば、FILTER_VALIDATE_EMAILを使えば、メールの正しい型か否かを判断できる。その他、FILTER_VALIDATE_URL、FILTER_VALIDATE_INT、FILTER_VALIDATE_BOOLEAN、FILTER_VALIDATE_IP等がある。

下記がLaravel5で開発したときの実際のスクリプトです。

public function loginhandle(Request $request)
{
 // formのinputがメールかIDかを判定する。ここでfilter_varが役立つ。
 $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';

 $remember = \Input::has('remember');
 if (\Auth::attempt([$field=> $request->input('login'), 'password' => $request->input('password')], $remember))
 {
  $admin = \Auth::user();
  return redirect('admintop');
 }

 return redirect('login')->withErrors(['error'=>'IDかメールアドレスかパスワードが違います']);
}

Laravel5用に書いたhtml部分(少し余分なものも入っているけど)
  {!! Form::open() !!}

    <input type="hidden" name="_token" value="{{ csrf_token() }}">

    {!! Form::label('login', 'メールかID') !!}
    {!! Form::text('login') !!}

    {!! Form::label('password', 'パスワード') !!}
    {!! Form::password('password') !!}

    {!! Form::submit('ログイン') !!}

    {!! Form::label('remember', 'パスワード保存') !!}
    {!! Form::checkbox('remember', '1', true) !!}

  {!! Form::close() !!}

参照:
PHPのドキュメント
楽に検証!値をチェックしてくれるfilter関数
filter_var関数でメールアドレスをバリデーションする



2015年4月5日日曜日

Laravel5利用中に使った「生年月日から年齢を計算する簡単な方法」

Laravel5で開発中に、生年月日から年齢を計算するときに使ったfloor()関数。

// form内のselectボックスで、年、月、日を取得し

$ymd = Request::input('birthy') . Request::input('birthm') . Request::input('birthd');

// $ymdは19880523のような文字列になっている。
// 下の2つのどちらの方法でも年齢が取得できる。今回の開発では、floor()関数を使った。

$nenrei = floor((date('Ymd')-$ymd)/10000); //floor()関数で整数値を取得する
$nenrei = (int)((date('Ymd')-$ymd)/10000); //整数型にキャストする

// floor()関数の動作定義は「最も近い最小の整数値を返す」という動作。引数に負の値を指定する場合にはちょっと注意。floor( -2.55 )は、-3になる。(int)-2.55なら、-2になる。

// floor()関数の同類関数: ceil() は値を切り上げる。round() は整数値に丸める。

/**
(int)の他に使用可能なキャスト
PHP の型キャストは、変換しようとする型を括弧で括り、キャストする変数の前に置く。
------------------------------------------------------------------------------
(int) -> 整数へのキャスト
(bool) -> 論理値へのキャスト
(float) -> floatへのキャスト
(string) -> 文字列へのキャスト
(array) -> 配列へのキャスト
(object) -> オブジェクトへのキャスト
(unset) -> NULLへのキャスト (PHP5)
(binary) -> 2進数へのキャスト(PHP5)
*/