Written by Manabu Bannai

【アメリカで人気なPHPフレームワーク】Laravel4の使い方メモ

Laravel PHP PROGRAMMING

Laravelのコマンドメモ

インストールコマンド

$ composer create-project laravel/laravel プロジェクト名 --prefer-dist

サーバー起動

$ php artisan serve

エラー表示

編集ファイル:app/config/app.php

'debug' => true,

マイグレーション


// マイグレーションファイルの生成
$ php artisan migrate:make create_users_table

// マイグレーション
$ php artisan migrate

// ロールバック
$ php artisan migrate:rollback

Pathの取得

<?php
/* 'app'フォルダへのPath */
echo app_path();

/* 'ルート'フォルダへのPath */
echo base_path();

/* 'public'フォルダへのPath */
echo public_path();

/* 'app/storage'フォルダへのPath */
echo storage_path();
?>

ユーザー一覧を表示する

まずはじめに、usersテーブルを作成しておきます。
ターブル名:users
カラム:user
Screen Shot 2014-09-15 at 15.38.30

また、app/models/User.phpに以下を追記しておいてください。
※現時点ではおまじないと考えておいてOKです。


// タイムスタンプの無効化
public $timestamps = false;

// 編集可能場所の指定
protected $fillable = ['username', 'password'];

つぎにユーザー表示用のルーティングの設定します。
編集ファイル:app/routes.php


// ブラウザで/usersへアクセスすると実行される
Route::get('users', function(){

  // Usrモデルを利用して、ユーザー情報をすべて取得
  $users = User::all();

  // ビューの読み込み&取得情報を$usersにわたす
        // withの使い方:with('データ名', 'わたすデータ')
  return View::make('users.index')
             ->with('users', $users);

});

つぎにview/users/index.blade.phpを作成
以下でユーザー一覧が表示できます。

@foreach($users as $user)
  <ul>
    <!-- link_to("リンク先のURL", パーマリンク名) --> 
    <li>{{ link_to("/users/{$user->username}", $user->username) }}</li>
  </ul>
@endforeach

DBが空の場合は、以下のように条件分岐も可能。

@if(count($users))
  @foreach($users as $user)
    <ul>
      <li>{{ link_to("/users/{$user->username}", $user->username) }}</li>
    </ul>
  @endforeach
@else
  <h1>no users</h1>
@endif

つぎに、ユーザー名をクリックできるようにします

編集ファイル:app/routes.php
ルーティング設定は以下。


Route::get('users/{username}', function($username){

  // select * from users where username = USERNAME LIMIT 1
  $user = User::whereUsername($username)->first();

  return View::make('users.show', ['user'=>$user]);
});

つぎにview/users/show.blade.phpを作成。
以下の記述で、個別のユーザー名が取得できます。

hello {{ $users->username }}

マスターテンプレートの作成

view/layouts/default.blade.phpを作成します。

<!DOCTYPE HTML>
<html lang="ja">
<head>
  <meta charset="utf-8" />
</head>
<body>

@yield('content')

</body>
</html>

つぎにview/users/index.blade.phpに以下を記述します。
『ここから』〜『ここまで』の部分がマスターテンプレート( view/layouts/default.blade.php )に反映されます。

@extends('layouts.default')

@section('content') <!-- ここから -->

<h1>All users</h1>

@foreach($users as $user)
  <ul>
    <!-- link_to("リンク先のURL", パーマリンク名) -->
    <li>{{ link_to("/users/{$user->username}", $user->username) }}</li>
  </ul>
@endforeach

@stop <!-- ここまで -->

コントローラーの設定

編集ファイル:app/routes.php

// ブラウザで/usersへアクセスすると、UsersController@indexが読み込まれる
Route::get('users', 'UsersController@index');

つぎにapp/controllers/UsersController.phpを作成します。
以下を記述。

<?php
class UsersController extends BaseController{

  public function index(){

    // Usrモデルを利用して、ユーザー情報をすべて取得
    $users = User::all();

    // ビューの読み込み&取得情報を$usersにわたす
    return View::make('users.index', ['users' => $users]);
  }

リソースコントローラー

ターミナルで以下を実行(scaffoldします)

$ php artisan controller:make UsersController

つぎに、app/routes.phpに以下を記述。

Route::resource('users', 'UsersController');

すると、以下のコントローラーが自動的に利用できるようになります。

変数 パス アクション Route Name
GET /users index user.index
GET /users/create create users.create
POST /users store users.store
GET /users/{user} show users.show
GET /users/{user}/edit edit users.edit
PUT/PATCH /users/{user} update users.update
DELETE /users/{user} destroy users.destroy

フォームの作成

編集ファイル:app/controllers/UsersController.php


public function create(){
  return View::make('users.create');
}

テンプレートの作成をします。
新規作成ファイル:app/views/users/create.blade.php

@extends('layouts.default')

@section('content')

<h1>Create users</h1>

// フォームのアクション先を指定
{{ Form::open(['route' => 'users.store']) }}

  <div>
    {{ Form::label('username', 'Username:') }}
    {{ Form::input('text', 'username') }}
  </div>

  <div>
    {{ Form::label('password', 'Password:') }}
    {{ Form::input('password', 'password') }}
  </div>

  <div>
    {{ Form::submit('Create User') }}
  </div>

{{ Form::close() }}

@stop

フォームのPOST内容をDBに保存する

編集ファイル:app/controllers/UsersController.php

public function store(){

  // インスタンス化
  $user = new User;
  $user->username = Input::get('username');
  $user->password = Hash::make(Input::get('password'));
  $user->save();

  return Redirect::route('users.index');
  // 上記は↓と同じ意味
  // return Redirect::to('/users');
}

ビューでwithの使い方の基礎

ビューにデータを結びつけます。


Route::get('/', function()
{
    return View::make('home')->with('name', '山田太郎');
});

上記のデータには以下のようにアクセスできます。

<html>
    こんにちは。 <?php echo $name; ?>.
    // こんにちは。 山田太郎
</html>

とりあえずメモです。
Laravelまじ便利です。

補足情報

MAMPを使っていて、php artisanが実行できない場合の対処方法。

/etc/pathsを開き、以下を追記。

/Applications/MAMP/bin/php/php5.5.10/bin
/usr/bin

その後、ターミナルを再起動します。
そして、以下のコマンドでphpのpathを確認します。

where php

ただしくpathが設定されていれば問題ないです。

※P.S:無料メルマガで発信中:過去の僕は「ブログ発信で5億円」を稼ぎました。次は「30億円」を目指します。挑戦しつつ、裏側の思考を「メルマガ」から発信します。不満足なら1秒で解約できます。無料登録は「こちら」です。