Laravel

これだけ覚えれば誰でも使えるLaravel

更新日:

今、話題のPHPフレームワークLaravel4、「PHP初心者には、敷居が高いのでは」と思っている方、安心してください。インストールが出来て、基本的な事を覚えれば、誰(PHP初心者)でも簡単に使用することが出来ます。

今回は、WindowsにXAMPPをインストールしている環境での使用方法をご紹介します。

インストール前の準備

まず、XAMPPをインストールしてください。

次に、composerをインストールします。

  • コンポーサーのインストール参照
  • ※composerのバージョンが古いとLaravelのインストール時にエラーが発生する可能性がありますので、既にcomposerを導入している方は、「composer self-update」を事前に行うことをお勧めします。

Laravelのインストール

上記の準備が出来たら、いよいよLaravelのインストールです。

  • コマンドプロンプトを起動したら、下記のコマンドを入力します。
  • composer create-project laravel-ja/laravel C:\xampp\htdocs\laravel dev-master --prefer-dist

ブラウザからhttp://localhost/laravel/pulbicと入力して、Laravelのロゴが表示されたら、インストール成功です。

Laravelの初期設定

インストールが完了したら、NetBeansでLaravelを扱えるように設定します。特にNetBeansでなくても構いませんが、比較的初心者でも使いやすいNetBeansをお勧めします。

NetBeansで、laravel/ソース・ファイル/app/config/app.phpを開き、以下のように修正します。※以降は、app/config/...のように表示します。

app/config/app.php

16行目:'debug'=>true,
42行目:'timezone'=>'Asia/Tokyo',
55行目:'lolale'=>'ja',

データベース(MySQL)の設定

次に、データベースの設定を行います。app/database.phpを開き、55行目以下を下記のように修正します。

app/database.php

'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => '1234',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
  • データベース名、ユーザー名、パスワードを各自の内容に応じて、記述します。
  • ※MySQLのパスワードを設定していない場合は、xamppseurity.phpを開き、パスワードを設定してください。
  • ※データベースを作成していない場合は、phpMyadminを開き、「データベース」→「データベースを作成する」で作成してください。

HomeControllerの修正

コントローラーの使い方を覚えるために、デフォルトのHomeController.phpを下記のように修正します。

app/controllers/HomeController.php

<?php
class HomeController extends BaseController {
public function getIndex()
{
$data['name']='WinRoad徒然草';
return View::make('home.index',$data);
}
}
  • 2行目:コントローラは、BaseControllerを継承します。
  • 3行目:showWelcome()をgetIndex()に修正します。これは、HTTPメソッドがGET時の処理を行います。
  • 6行目:View::makeメソッドの第1引数で、表示(生成)するビューファイルapp/views/home/index.blade.phpを指定します。第2引数に、ビューファイルに引き渡すデータ(オブジェクト)を添付します。5-6行目は、下記のようにも記述できます。
    $name='Winroad徒然草';
    return View::make('home/index',compact('name'));

ルーターにHomeControllerを登録

ルーターにHomeControllerをRestフルコントローラーとして登録します。下記のコードを追加します。

app/routes.php

Route::controller('home','HomeController');
  • 第1引数に、コントローラーのURI、第2引数に、コントローラー名を指定します。
  • http://localhost/laravel/pulbic/homeにアクセスすると、HomeControllerのgetIndexメソッドが実行されます。

ビューの作成

viewsフォルダに新しくhomeフォルダとその中に、index.blade.phpファイルを作成し、下記のコードを記述します。

app/views/home/index.blade.php

<h1>Hello World!!</h1>
{{'<p>'.$name.'</p>'}}
  • ブラウザから、http://localhost/larave/public/home/又は、http://localhost/laravel/public/home/indexと入力すると、大きい文字でhello world!と表示され、その下に、小さな文字で、WinRoad徒然草と表示されます。
  • 2行目は下記のように記述した方がすっきりします。
    <p>{{$name}}</p>

ここまでの解説

Laravelは、かなり自由度が高いので、ルーターだけでほとんどのことが出来ます。又、Restフルコントローラやリソースフルコントローラなど便利なコントローラーもありますので、何を使っていいのか迷うところですが、初心者には、Restフルコントローラーをお勧めします。

Restフルコントローラを使用する方法で説明をします。

  1. app/controllersフォルダにアッパーキャメル記法(先頭大文字)+Controller.php名(例:HomeController.php、UserController.php)で、phpファイルを作成します。
  2. クラス名は、ファイル名と同じにし、BaseControllerを継承します。
    class HomeController extends BaseController{} や
    class UserController extends BaseController{} 等
  3. アクションメソッドの前に、getやpost、anyを付けて記述します。(例:getIndex、postCreate等)
  4. getは、リンク文字をクリックした時、postはフォーム送信データを受け取った時、anyはその両方の命令を実行する時と覚えてください。※厳密に言えば、この説明では、不十分ですので、お叱りのコメントを頂くかも知れませんが、初心者は、とりあえず、このように覚えた方がわかりやすいと思います。
  5. コントローラを作成したら、かならずルーターに登録します。Route::controllerメソッドの第1引数に、コントローラのURI、第2引数にコントローラ名を記述します。
    Route::controller('/','HomeController'); や
    Route::controller('user','UserController'); 等
  6. ビューファイルを表示(生成)するには、View::makeメソッドを使用します。
  7. View::makeメソッドの第1引数に、表示するビューファイル名(フォルダ名.ファイル名)を記述し、.phpや.blade.phpの拡張子は付加しません。第2引数には、オプションでそのビューに渡すデータ(オブジェクト)を指定します。
  8. ビューファイルは、app/viewsフォルダ以下に配置します。
  9. ブレードテンプレートを使用するには、ファイル名の拡張子を.blade.phpにします。
  10. ブレードでは、echoの代わりに、{{...}}や、{{{...}}}を使用します。又、単に文字を表示するだけなら、{{}}は必要ありません。

ブレードテンプレートの作成

実際にLaravelを使用するために、まず、最初に、ブレードテンプレートでレイアウトを作成します。一度レイアウトを作成しておけば、簡単にレイアウトの中にコンテンツ(ビューファイル)を埋め込むことが出来ます。

ブレードテンプレートのレイアウトは自由に作成することが出来ますが、Laravelは、Twitter Bootstrapと相性がいいので、下記のようなレイアウトを作成します。※下記では、BootstrapのCDNを利用していますので、Bootstrapのインストール(ダウンロード)は不要です。

app/views/tbs/base.blade.php

<!DOCTYPE html>
<html lang="ja">
 <head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <title>
 @section('title')
 WinRoad徒然草
 @show
 </title>
<!-- Bootstrap -->
 {{HTML::style("//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css")}}
 <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
 <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
 <!--[if lt IE 9]>
 <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
 <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
 <![endif]-->
 </head>
 <body>
 @section('navbar')
 <div class="navbar navbar-inverse" role='navigation'>
 <div class="container">
 <div class="navbar-header">
 <button type='button' class="navbar-toggle" data-toggle='collapse' data-target='.navbar-collapse'>
 <span class="sr-only">Toggle navigation</span>
 <span class="icon-bar"></span>
 <span class="icon-bar"></span>
 <span class="icon-bar"></span>
 </button>
 <a class="navbar-brand" href="#">{{$name}}</a>
 </div>
 <div class="collapse navbar-collapse">
 <ul class="nav navbar-nav">
 <li>{{link_to('#','Home')}}</li>
 <li>{{link_to('#','Contact')}}</li>
 </ul>
 </div>
 </div>
 </div>
 @show
 <div class='container'>
 @yield('content')
 </div>
 <div id="footer">
 <div class="container">
 <p class="text-muted">
 @section('footer')
 winroad.jp
 @show
 </p>
 </div>
 </div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
 {{HTML::script("https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js")}}
 <!-- Include all compiled plugins (below), or include individual files as needed -->
 {{HTML::script("//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js")}}
 </body>
</html>
  • ブレードテンプレートの保存場所は、app/viewsフォルダ以下ならどこでも構いませんが、私は、tbsフォルダを作成して、その中にbase.blade.phpテンプレートファイルを作成しました。私の場合、twitter bootstrapだけでなく、foundationや、jQueryMobileなど、いろいろなCSSフレームワークを併用していますので。
  • 8-10行目:ページタイトルを変更することが出来ます。コンテンツ(ビューファイル)内で@section('title')から@show迄の間の文字は変更することが出来ます。
  • 22-42行目:@section('navbar')から@show迄の間も、簡単に変更することが出来ます。ただ、この場合、行数が多いので、ビューファイル内でいちいち変更するのは面倒です。そこで、tbsフォルダ内にnavbar.blade.phpというファイルを作成しておけば、ビューファイル(index.blade.php)内で、下記のように記述すれば、簡単に入れ替えることが出来ます。
    @section('navbar')
    @include('tbs.navbar')
    @stop
  • 32行目:ナビゲーションバーのタイトルにコントローラから渡された変数$nameが表示されます。※コントローラから渡されたデータがテンプレートにも、適用されることを実証する為にこのように記述しましたが、この場合、コントローラから$name変数が渡されなかった場合エラーになりますので、実際に使用するには、下記の方がいいと思います。
    <a class="navbar-brand" href="#">
    @section('brand')
    WinRoad徒然草
    @show
    </a>
  • 上記のようにデフォルトでサイトのメインタイトルが表示されるようにしておいて、コンテンツの内容(ページ)ごとに、ナビゲーションバーのタイトル名を変更できるようにしておいた方がいいでしょう。
  • 44行目:@yield('content')がメインコンテンツ(ビューファイルの@section('content')から@stop迄の間のデータ)の表示される場所になります。

先ほどの、ビューファイル(home/index.blade.php)を下記のように修正します。

app/views/home/index.blade.php

@extends('tbs.base')
 @section('title')
 @parent
 トップページ
 @stop
 @section('content')
 <h1>Hello World!!</h1>
 @stop
 @section('footer')
 {{$name}}
 @stop
  • 1行目:土台となるブレードテンプレートを指定します。
  • 2-5行目:@section('title')から@stop迄の間がブレードテンプレート(base.blade.php)の@section('title')から@show迄の間のデータ(文字)と入れ替わります。が、3行目の@parentにより、テンプレートを継承しつつ、トップページという文字が追加されます。この2-5行目がなければ、テンプレートのデフォルト文字が表示されます。
  • 6-8行目:section('content')から@stop迄の間のデータが、テンプレートの@yield('content')に入れ替わります。
  • 9-11行目:@section('footer')から@stop迄の間のデータが、テンプレートの@content('footer')から、@showの間のデータと入れ替わり、コントローラより添付された$name変数(WinRoad徒然草)が表示されます。9-11行目を記述しなければ、フッター部分にテンプレートのデフォルトであるwinroad.jpの文字が表示されます。

laravel053

モデルの基本

コントローラ、ビューと説明したところで、モデルの使い方をご紹介します。モデルは、EloquentORMを使用する前提で説明いたします。

基本的にモデルは、データベーステーブルのデータの操作を担当します。下記の規約を守っていれば、簡単に操作できます。

  1. テーブル名は、小文字の複数形で作成します。(例:users、profiles)
  2. プライマリーキーはid名で作成します。
  3. timestamp種別でcreated_atとupdated_atを作成します。
  4. モデルは、app/modelsフォルダ内に、アッパーキャメル記法の単数名で作成します。(例:User.php、Profile.php)
  5. クラス名はファイル名と同じにして、Eloquentを継承します。つまり、規約を守っていれば、下記のように記述するだけで、テーブルは操作できるようになります。
    <?php
    class User extends Eloquent{}

モデルクラスは、モデル名::メソッド名でデータを操作することが出来ます。例えば、User::find(1);で、usersテーブルのidが1のデータ(オブジェクト)を取得したり、User::where('age','>',20)->get();でusersテーブルのageフィールド(カラム)の値が20以上のデータ(オブジェクト)を取得できます。

まとめ

それでは、Laravelの基本をまとめてみます。※これは、あくまでも基本的な使用方法であって、Laravelを使いこなせるようになれば、自由にカスタマイズできます。

  1. app/controllersフォルダ内にコントローラを作成します。
  2. app/viewsフォルダ内にビューファイルを作成します。
  3. app/modelslフォルダ内にモデルを作成します。
  4. コントローラ名とコントローラクラス名は名前+Controllerで作成し、BaseControllerを継承します。
    (例)class HomeController extends BaseController{}
  5. コントローラを作成したら、routes.phpに登録します。
    (例)Route::controller('home','HomeController');
  6. コントローラのアクションメソッド名には、HTTPメソッド名(get、postやany)を先頭に付与します。
    (例)getIndex、postCreate、anyUpdate
  7. ビューファイルを表示(生成)するには、View::makeメソッドを使用します。
  8. View::makeメソッドの第1引数は、ビューファイル、第2引数は、ビューファイルに渡すデータ(オブジェクト)を指定します。
  9. ビューファイルは、ブレードテンプレートを活用します。基本的なテンプレートを作成したら、テンプレートに埋め込む、ビューファイルを作成します。
  10. ブレードテンプレートもapp/viewsフォルダ以下に作成します。
  11. データベーステーブルを操作するには、クエリービルダーかEloquentORMを使用します。クエリービルダーのメソッドを覚えたら、ほとんどそのままEloquentORMでも使用することが出来ます。

以上、Laravelのほんのさわりの部分をご紹介いたしましたが、実際にインストールして、Laravelをいじくり回してください。Laravelの楽しさに魅了されると思います。

-Laravel

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.