イメージ画像

Laravel5で社内専用サイト(6-1)

ACL(アクセスコントロールリスト)に関しては、パッケージを使おうと思ったのですが、私の環境が悪いのか、思うように動かないので、勉強がてら、自分で作ってみたいと思います。

ACLの基本設計

ACLを作るに当たり、下記のような基本設計を考えてみました。

  1. 全ユーザーからアクセスできるコントローラには、デフォルトのMiddleware(Authenticate.php)を使用する
  2. アクセス制限するコントローラには、新しいMiddleware(WinAcl.php)を使用する
  3. アクセス許可(permission)は、アクションメソッドごとに作成する
    ※セキュリティの関係で、いったんコントローラごとアクセス制限して、許可するアクションメソッドを登録します。
  4. テーブルは、roles、permissions、permission_roleの3つを追加作成する
    ※role_userテーブルも作成して、userがroleを複数持てるようにする方法もあるが、社内サイトなので、そこまでは必要ないと思い、role_userは今回作成しません。必要になれば、後から作成したいと思います。
  5. usersテーブルに、role_idフィールドを追加する
  6. adminロールは、全てのアクションメソッドにアクセスできるようにする

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年8月17日 | コメント/トラックバック(0) |

カテゴリー:Laravel

Laravel5で社内専用サイト(5)

前回は、登録ユーザーの承認(アクティベート)処理を行いましたが、今日は、登録ユーザーがパスワードを忘れた場合の、パスワード再発行処理を作成してみたいと思います。

パスワードの再発行処理は、前回作成した登録ユーザーの承認処理とほとんど同じですので、そんなに難しくないと思います。

  1. ログイン画面のリンクからパスワード再発行用のページへ移動
  2. メールアドレスを入力すれば、登録ユーザー宛に再発行ページのリンクが記載されたメールが届く
  3. 新規パスワードを入力すれば、ログインできる
  4. 例外として、アクティベートされていないユーザーからの再発行申請は、却下します。

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年8月13日 | コメント/トラックバック(0) |

カテゴリー:未分類 Laravel

Laravel5で社内専用サイト(4)

前回までは、社内サイトへアクセスするためのユーザー作成とログイン処理を作成しましたが、一般的な会員制のサイトと違い、誰でも登録するわけにはいきません。そこで、社員登録用の処理を下記のように一工夫する必要があります。

  1. ユーザー登録を行ったら、Admin宛てに承認用のメールを送信する。
  2. Adminが送られてきたメールの承認処理を行えば、本人宛に登録処理済みのメールを送信する。
  3. 登録ユーザーは、そこのリンクをクリックすれば、アクティベートされる。
  4. 未承認のデータが蓄積されるのを防ぐために、未承認データは削除します。

ユーザー登録申請

それでは、まず最初にpostCreateメソッドを下記のように修正します。

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年8月12日 | コメント/トラックバック(0) |

カテゴリー:Laravel

Laravel5で社内専用サイト(3)

前回は、新規ユーザーの作成までを行いました。本日は、新規作成したユーザーでログインするためのログインフォームを作成したいと思います。

AuthControllerに、下記を追加します。

app/Http/Controllers/Auth/AuthController.php

public function getLogin()
 {
 return view('login');
 }
 
 public function postLogin(Request $request)
 {
 //バリデーション
 $val=$this->validator($request->all());
 if($val->fails()){
 return redirect()->back()->withInput()
 ->withWarning('ユーザー名かパスワードが違います');
 }
 //認証手続き
 Auth::attempt([
 'name'=>$request->name,
 'password'=>$request->password
 ],$request->remember_me);
 return redirect()->to('home/index');
 }

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年8月11日 | コメント/トラックバック(0) |

カテゴリー:Laravel

Laravel5で社内専用サイト(2)

社内専用サイトですので、外部からのアクセスを制限しなければなりません。そこで、今日から認証およびアクセス制限のプログラムを作成していきたいと思います。作成するといってもLaravel5には、デフォルトで認証機能が付属しています。その認証機能を使用して作成していきます。

メッセージの日本語化

その前に、コメントやエラーメッセージを日本語化したいと思います。川瀬裕久氏から日本語変換のパッケージを提供していただいていますので、それを使用させていただきたいと思います。

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年8月10日 | コメント/トラックバック(0) |

カテゴリー:Laravel

Laravel5で社内専用サイト(1)

今日から、Laravel5で社内専用サイトを少しずつ作成していきたいと思います。以下のような開発環境で作成していきます。

  1. ローカル開発環境(XAMPP)
  2. ローカル環境のエディタ(NetBeans)
  3. 実行環境(レンタルVPSサーバー:CentOS7.0)
  4. 実行環境とのSSH接続(Tera Term)

Laravel5のインストール

実行環境に、Tera Termでアクセスしたら、コマンドプロンプトで下記のように入力します。

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年8月6日 | コメント/トラックバック(0) |

カテゴリー:Laravel

Laravel5でZendPDFを使う

ZendFrameworkのコンポーネントであるZendPDFは、PDFファイルの読み込みや生成が簡単にできるライブラリとして提供されています。標準でマルチバイト文字に対応していますので、日本語のPDFファイルの出力が容易にできるのが魅力です。また、複数のPDFファイルのマージや1ページ単位で編集などの多機能で使いやすいのが特徴です。

今日は、そのZendPDFをLaravel5で使用する方法を調べてみたいと思います。

ZendPDFのインストール

ZendPDFのインストールはComposer経由で可能ですので、インストールは簡単です。下記のようにcomposer.jsonにZendPDFを追加記述します。

"require": {
 "laravel/framework": "5.0.*",
 "zendframework/zendpdf": "dev-master"
 },

上記の3行目を追加記述したら、composerをupdateします。

cd c:\xampp\htdocs\laravel
composer update

composerをupdateしたら、app/vendorフォルダにzendframeworkフォルダがインストールされています。

日本語フォントの用意

デフォルトのフォントでは、日本語が表記できませんので、日本語を利用できるフリーのフォントを用意します。下記のサイトから自由に選択して下さい。

2015年用、日本語のフリーフォント164種類のまとめ

私は、今回のその中から、Unicodeの全漢字9万字以上を収録している、花園フォントをダウンロードします。花園フォントのダウンロードをクリックすると、OSDNのダウンロードページへ移動します。真ん中より少し下の方に、hanazono-20141012.zipファイルがありますので、クリックしてダウンロードします。

2015-06-18 10-05-20

ダウンロードしたZipファイルを解凍したら、HanaMinA.ttfとHanaMinB.ttfファイルをpublic/fontsフォルダに保存します。

2015-06-18 10-20-52

PDFを作成/保存する

それでは、実際にPDFを作成するために、コントローラを作成してみます。コマンドプロンプトから、下記を実行します。

php artisan make:controller PdfController

ルーターにPdfControllerを追加します。

Route::controller('pdf','PdfController');

生成されたコントローラのcreateメソッドをgetCreateに変更して、PDFを生成してみます。

<?php namespace App\Http\Controllers;
use App\Http\Requests;
 use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
//ZendPdfをインポート
 use ZendPdf\PdfDocument;
 use ZendPdf\Font;
 use ZendPdf\Page;
class PdfController extends Controller {
public function getCreate()
 {
 // PDFドキュメントを生成
 $pdf = new PdfDocument();
// A4サイズでPDFのページ生成
 $pdfPage = new Page(Page::SIZE_A4);
// 日本語のフォントを指定
 $font = Font::fontWithPath('fonts/HanaMinA.ttf');
// フォントと文字のサイズを指定
 $pdfPage->setFont($font , 24 );
// 出力する文字と位置、文字コードの指定
 $pdfPage->drawText('ZendPDFでPDF生成',100, 800, 'UTF-8');
// 生成したページをPDFドキュメントに追加
 $pdf->pages[] = $pdfPage;
// ファイルとして保存、ブラウザに出力
 $pdf->save('sample.pdf');
 header ('Content-Type:', 'application/pdf');
 header ('Content-Disposition:', 'inline;');
 echo $pdf->render();
 }
 }

それでは、実際にブラウザで表示してみましょう。

2015-06-18 10-57-49

そして、public/sample.pdfファイルが生成されています。

PDFファイルを読み込む

既存のPDFファイルを読み込むのは、とても簡単です。getIndexアクションを下記のように記述します。

public function getIndex()
 {
 //PDFを読み込む
 $pdf= PdfDocument::load('sample.pdf');
//ブラウザに表示
 header ('Content-Type:', 'application/pdf');
 header ('Content-Disposition:', 'inline;');
 echo $pdf->render();
 }

これで、簡単にブラウザでPDFファイルを表示することができます。

PDFファイルをマージする

複数のPDFファイルをマージして1つのPDFファイルとして扱う方法を調べてみます。

getMergeアクションを作成して、下記のように記述します。

public function getMerge()
 {
 //マージするPDFファイル
 $files=['sample.pdf','sample2.pdf'];
//マージ用のPDFオブジェクト
 $merge=new PdfDocument;
 foreach($files as $file):
 //PDFを読み込む
 $pdf= PdfDocument::load($file);
 //PDFの内容を取得
 $extractor=new \ZendPdf\Resource\Extractor();
 //各ページを取得
 foreach($pdf->pages as $page):
 //ページの内容をコピー
 $clone=$extractor->clonePage($page);
 //マージ用のPDFにページ内容を追加
 $merge->pages[]=$clone;
 endforeach;
 endforeach;
 //マージしたPDFファイルを保存
 $merge->save('sample3.pdf');
 }

尚、マージするPDFファイル( sample.pdfとsample2.pdf )は、publicフォルダの直下に用意して下さい。

これで、2つのPDFファイルがマージされて1つのPDFファイルが生成されました。

本日のまとめ

  1. ZendPdfのインポート
    use ZendPdf\PdfDocument;
    use ZendPdf\Font;
    use ZendPdf\Page;
    use ZendPdf\Resource\Extractor;
  2. 新規PDFドキュメントの作成及び読み込み
    //新しいPDFドキュメントの作成
    $pdf1=new PdfDocument();
    //ファイルからPDFドキュメントを読み込む
    $pdf2=PdfDocument::load($fileName);
    //文字列からPDFドキュメントを読み込む
    $pdf3=PdfDocument::parse($pdfString);
  3. PDFドキュメントの保存
    //PDFドキュメントを読み込みます
    $pdf=PdfDocument::load($fineName);
    //ドキュメントを更新します
    $pdf->save($fileName,true);
    //ドキュメントを新しいファイルに保存します
    $pdf->save($newFileName);
    //PDFドキュメントを文字列で返します
    $pdfString=$pdf->render();
  4. PDFドキュメントのページ操作
    //PDFドキュメントを読み込みます
    $pdf=PdfDocument::load($fineName);
    //ページの並び順を反転します
    $pdf->pages=array_reverse($pdf->pages);
    //A4サイズで新しいページを追加します
    $pdf->pages[]=new Page(Page::SIZE_A4);
    //指定したページを削除します
    unset($pdf->pages[$id]);
  5. ページの複製
    //テンプレートを別の変数に格納します
    $template=$pdf->pages[$templatePageIndex];
    //新しいページを追加します
    $page1=new Page($template);
    //日本語フォントを指定
    $font=Font::fontWithPath($fontName);
    $page1->setFont($font,24);
    //追加するテキスト
    $text="Some text...";
    //X座標(左端からの距離)
    $x=50; //ポイント数(1インチの1/72)
    //Y座標(下部からの距離)
    $y=800;  //ポイント数(1インチの1/72)
    //テキストを描画
    $page1->drawText($text,$x,$y,"UTF-8");
    $pdf->pages[]=$page1;
    //別のページを追加します
    $page2=new Page($template);
    //追加するテキスト
    $text="Anothe text...";
    //X座標
    $x=50;
    //Y座標
    $y=750;
    //2ページ目を描画
    $page2->drawText($text,$x,$y,"UTF-8");
    $pdf->pages[]=$page2;
    //最後にテンプレートページをドキュメントから削除
    unset($pdf->pages[$templatePageIndex];
  6. Extractorクラスを利用して既存のページを複製
    $extractor=new Extractor();
    $page1=$extractor->clonePage($pdf->pages[$templatePageIndex1]);
    $page2=$extractor->clonePage($pdf->pages[$templatePageIndex2]);
    $font=Font::fontWithPath($fontName);
    $page1->setFont($font,24);
    $page1->drawText('Some text...',$x,$y,'UTF-8');
    $page2->setFont($font,24);
    $page2->drawText('Another text...',$x,$y,'UTF-8');
    $pdf=new PdfDocument();
    $pdf->pages[]=$page1;
    $pdf->pages[]=$page2;
  7. ページの大きさはページオブジェクトから取得します
    $pdf=PdfDocument::load($fineName);
    //ページの横幅を取得
    $width=$pdf->pages[$PageIndex]->getWidth();
    //ページの縦幅を取得
    $height=$pdf->pages[$pageIndex]->getHeight();

ZendPDFのサイト

その他のZendPDFの詳細な利用方法は、ZendFramework2の公式サイトを確認して下さい。

Zend_Pdf

2015-06-18 12-25-20

本日は、以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年6月18日 | コメント/トラックバック(0) |

カテゴリー:Laravel

Laravel5のエラー対策

Laravel5で、エラー画面が表示されたときに、どのようなエラーでどこを調べればいいかをまとめてみたいと思います。私もしょっちゅうエラーは出させますので、メモとして保存しておきたいと思います。

NotFoundHttpException

NotFoundHttpExceptionのみ

  • NotFoundHttpExceptionのみで、他に何も表示されない場合は、コントローラ名が間違えている可能性が高いです。
    URLは、public/コントローラ/メソッド/パラメータの順番で表示されますので、下記の例では、gather です。2015-05-30 18-01-39

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年6月5日 | コメント/トラックバック(0) |

カテゴリー:Laravel

Laravel5のEloquentORMで1対多のリレーション(その4)

前回は、新しいテーブルを作成して、そのモデルとGatherモデルにリレーションを設定するところまでを作業しました。本日は、実際に新しいモデル(DetailモデルとItemモデル)と、基本となるモデル(Gatherモデル)とのリレーションを利用しながら、コードを記述していきたいと思います。

Gathersコントローラの修正

GathersControllerを下記のように修正します。

app/Http/Controllers/GathersController.php

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年5月29日 | コメント/トラックバック(0) |

カテゴリー:Laravel

Laravel5のEloquentORMで1対多のリレーション(その3)

今日は、Gathersに詳細データを添付したいと思います。新たに、detailsテーブルと、itemsテーブルを作成します。detailsテーブルに詳細情報を登録するのですが、detailsの詳細情報の項目名は、itemsテーブルから参照することにします。

  1. detailsテーブル
    • カラム(id,gather_id,item_id,.content+タイムスタンプ)
  2. itemsテーブル
    • カラム(id,name,sort)

テーブルの作成

SetupControllerのgetCreateメソッドを下記のように修正します。

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年5月28日 | コメント/トラックバック(0) |

カテゴリー:Laravel

このページの先頭へ