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

2016年3月18日金曜日

僕はLaravelを使う事にした(3):RoutingからViewまで

このエントリーをはてなブックマークに追加
シリーズものだったりするのでこれまでのエントリを並べておく。


Routing

RutingとはアクセスしてきたURLとHTTPメソッドに対して実行するコントローラがクロージャを記載する。これはapp/Http/routes.phpにコーディングする。チュートリアルにある例をそのままもってくるとこんな感じ。

use App\Task;
use Illuminate\Http\Request;

/**
* 全タスク表示
*/
Route::get('/', function () {
//
});

/**
* 新タスク追加
*/
Route::post('/task', function (Request $request) {
//
});

/**
* 既存タスク削除
*/
Route::delete('/task/{id}', function ($id) {
//
});

Route::の後がHTTPメソッドになっていて、第1引数にURLを指定しているのがわかる。第2引数はクロージャになってる。

チュートリアルの内容的には全タスクを表示だとかなんだとか書いているけども”/”にアクセスされた時の挙動としてViewを表示した時の処理を足す。
/**
 * 全タスク表示
 */
Route::get('/', function () {
 // resourcse/views配下のtasksテンプレートを表示させる
 return view('tasks');
});
ここで指定したtasksというViewをresources/views配下に作っていく。

View

ViewもRailsやSymfonyと同じでページ共通部分(ヘッダー、フッター、ナビゲーションなど)を共通化できるlayoutという概念をもっており、その中で各ページで異なる部分は各ページのviewで担うようになっている。

layoutで使用するViewはresources/views/layoutsに置かれる。ここでつくるのはapp.blade.phpになる。わかりやすくするためにこんな感じで作ってみた。



layoutだよ
 
@yield('content')
body> 


tasks.blade.phpresources/viewsに置く。

@extendで指定したlayouts.applayouts/app.blade.phpを指定し、@section〜@endsectionまでの間が@yield('content')に挿入される。
@extends('layouts.app')

@section('content')
tasks.blade.phpの部分だよ
@endsection

これでサイト上で確認してみよう。http://IP Address/test1/でアクセスするとこのように見えた!

2016年3月10日木曜日

僕はLaravelを使う事にした(2):チュートリアルをやってDB周りになじむ

このエントリーをはてなブックマークに追加
さてLaravelをインストールしてみたものの使い方はSymfonyをwrapしているので、似たようなものと思っているけど実際のところは分からないので用意されているチュートリアルをやってみる事にした。内容すっごい分かりにくいけど。


DBのテーブルを作成する。

SymfonyやRailsと同じようにMigrationを行ってデータベース管理をする。tasksテーブルを作成するためのMigrationの雛形を作成する。
$ php artisan make:migration create_tasks_table --create=tasks
Created Migration: 2016_03_10_084136_create_tasks_table
artisanの使用方法についてはこんな感じ。
$ php artisan make:migration <Migration File Name> --create=<Table Name>
これを実行するとProject/database/migrations配下に2016_03_10_084136_create_tasks_table.phpというようなファイルが作成される。中身はこんな感じ。
increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('tasks');
    }
}
レコードのIDとタイムスタンプのカラムがデフォルトで設定されているので、これにタスク名を格納するためのカラムを追加で設定する。こんな感じ。ハイライト部分が追記した部分。
public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }
このMigrationを実行する前に。やっておく事が2つ。
  • データベースの作成
  • .envとconfig/database.phpへのデータベース設定
今回はMySQLを利用し、データベースは'Laravel_tutorial'として、mysqlに対して事前に作成しておく。

データベース設定はユーザはめんどくさいのでrootを使った。.envとconfig/database.phpに両方設定しておく必要があるが、.envは開発用、.envに設定がない場合はconfig/database.phpの値が利用される。.envに設定されている値がなければconfig配下の設定ファイルの値が利用される。
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=Laravel_tutorial
DB_USERNAME=root
DB_PASSWORD=password

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'Laravel_tutorial'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', 'password'),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],
これが終わったらようやくMigrateできる。
php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrated: 2016_03_10_084136_create_tasks_table
MySQLでデータベースLaravel_tutorialにtasksテーブルが出来ているかみてみる。
mysql> show tables;
+----------------------------+
| Tables_in_Laravel_tutorial |
+----------------------------+
| migrations                 |
| password_resets            |
| tasks                      |
| users                      |
+----------------------------+
4 rows in set (0.00 sec)

mysql> desc tasks;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255)     | NO   |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
4 rows in set (0.15 sec)
出来ているのを確認したらテーブルtasksへアクセスするためのモデルTaskを作成する。
$ php artisan make:model Task
Model created successfully.
テーブル名は複数形、モデルは単数形という暗黙のルールがあるので明示的にtasksテーブルを指定せずともTaskというモデルはtasksテーブルを参照するモデルがapp配下に作成される。
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    //
}
疲れてきた。

僕はLaravelを使う事にした(1):導入〜確認まで

このエントリーをはてなブックマークに追加
ずっとPHPのフレームワークはSymfonyを使っていたんだけれど、そろそろ新しいイケてるやつも出てきてるんじゃないかということで調べてみるとPHPフレームワークおすすめ一覧【10選】2015年⇒2016年へ向けて。という記事に当たり、その中からLaravelを試してみようと思ったので、導入〜確認まで。


Composerのインストール

Laravelでは依存関係の解決にComposerを使っているそうなので事前にインストールしておく。

Download Pageから1.0.0-beta1をダウンロードし、/usr/local/bin配下にcomposerという名前でリネームして移動させる。
$ wget https://getcomposer.org/download/1.0.0-beta1/composer.phar
$ mv composer.phar /usr/local/bin/composer
最後、コマンドとして実行するためにパーミッションを付与する。
$ chmod +x /usr/local/bin/composer

Laravelのインストール

これは簡単。先ほどインストールしたcomposerコマンドを叩くだけ。
$ composer global require "laravel/installer=~1.1"
Changed current directory to /root/.config/composer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing symfony/process (v3.0.3)
Downloading: 100%

- Installing symfony/polyfill-mbstring (v1.1.1)
Downloading: 100%

- Installing symfony/console (v3.0.3)
Downloading: 100%

- Installing guzzlehttp/promises (1.1.0)
Downloading: 100%

- Installing psr/http-message (1.0)
Downloading: 100%

- Installing guzzlehttp/psr7 (1.2.3)
Downloading: 100%

- Installing guzzlehttp/guzzle (6.1.1)
Downloading: 100%

- Installing laravel/installer (v1.3.1)
Downloading: 100%

symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing psr/log (For using the console logger)
Writing lock file
Generating autoload files
最後に~/.composer/vendor/binにPATHを通しておく。

Laravelを利用したProjectの作成

これも簡単。Projectを作りたいディレクトリでLaravelのコマンドを実行する。今回は作成されたProject配下のpublicへDocumentRootにシンボリックリンクを作成したいので、その場合DocumentRootと同列のディレクトリにProjectを作成する。何かもっといい方法がありそうだけど。。。

参考:http://stackoverflow.com/questions/30301573/laravel-symbolic-links-without-losing-prefix
$ cd /usr/local/apache2
$ laravel new test1
$ ln -s ../test1/public test1
実行する前にstorageディレクトリにパーミッションを付与する。
chmod -R o+w storage

確認

URLにアクセスする。


できた、できた。