LoginSignup
6
5

More than 5 years have passed since last update.

Laravel5ことはじめ

Last updated at Posted at 2017-02-21

はじめに

Laravelを導入してみましたが構成が全然わからないので自分なりの備忘録として作成。
導入手順、環境については過去の記事を参照。

2017/02/23追記:
色々やっているうちにLaravelのバージョンが5.4に上がっちゃうという不測の事態が発生。少し環境が変わっています。

前提環境

  • Composer 導入済み
  • Laravel 5.4 導入済み
  • MySQL 導入済み
  • PHP 5.6( + phpmcrypt)導入済み

Controllerを生成してみる

console
# プロジェクトルートへ移動
$ cd /var/www/html/sample/

# データ操作に必要なメソッドを生成する場合
$ php artisan make:controller PagesController

# デフォルトメソッドが不要である場合
$ php artisan make:controller --plain PagesController

Controllerからページを表示させる

概要

ページアクセス時にroutes.php web.phpからPagesController.phpを呼び出して、特定のページ(about.blade.php)を表示できるようにしてみる。
アクセス先 : http://{ localhost or IP }:8000/about/

構成

旧環境


[/var/www/html/sample]
 |
 +-[resources]
 |  |
 |  +-[views]
 |      |
 |      +-[pages]--about.blade.php
 |
 +-[app]
     |
     +-[Http]--routes.php
         |
         +-[Controllers]--PagesController.php

Laravel 5.4環境


[/var/www/html/sample]
 |
 +-[resources]
 |  |
 |  +-[views]
 |      |
 |      +-[pages]--about.blade.php
 |
 +-[app]
 |   |
 |   +-[Http]
 |       |
 |       +-[Controllers]--PagesController.php
 |
 +-[routes]--web.php

ソースコード

Laravel 5.4ではroutes.phpがなくなり、代わりにそれぞれの処理に応じたphpファイルroutesディレクトリ内に生成されるようになっていました。

/var/www/html/sample/routes/web.php
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', function () {
    return view('welcome');
});
Route::controller("about","PagesController@getIndex"); // Controller名@クラス名で指定
/var/www/html/sample/app/Http/Controllers/PagesController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class PagesController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function getIndex()
    {
        $name = [];
        $name['first_name'] = 'Tetsuro';
        $name['last_name']  = 'Degawa';
        return view("pages.about", $name); // サブディレクトリを参照する場合は「.」でつなぐ 第二引数に連想配列を渡すことでフォーム側から出力できる

    }
}
/var/www/html/sample/resources/view/pages/about.blade.php
<?php
    echo "<h1>About: {$first_name} {$last_name}.</h1>";

レイアウトを別に分ける

概要

about.blade.phpの内容はコンテンツの表示のみに留め、レイアウトを別のところ(layout.blade.php)で管理したい。

構成


[/var/www/html/sample]
 |
 +-[resources]
 |  |
 |  +-[views]--layout.blade.php[!]
 |      |
 |      +-[pages]--about.blade.php
 |
 +-[app]
 |   |
 |   +-[Http]
 |       |
 |       +-[Controllers]--PagesController.php
 |
 +-[routes]--web.php

ソースコード

/var/www/html/sample/routes/web.php
    // 先ほどと変更なし
/var/www/html/sample/app/Http/Controllers/PagesController.php
    // 先ほどと変更なし
/var/www/html/sample/resources/view/about.blade.php
// 先ほどの記述はすべてコメントアウト
// <?php 
//     echo "<h1>About: {$first_name} {$last_name}.</h1>";

// 代わりに以下を記述
@extends('layout')  // layout.blade.phpを読み込み
@section("content") // layout.blade.phpのcontentセクションに表示する部分
    <h1>Hello, {{$first_name}} {{$last_name}}.</h1> // 変数を表示する場合は{{ }}で囲う
@endsection         // contentセクション終了
/var/www/html/sample/resources/view/layout.blade.php
<!DOCTYPE html>
<html>
<head>
    <title>sample</title>
</head>
<body>
    @yield('content') // contentセクションを表示する部分
</body>
</html>

フォームの作成・値の取得

概要

Webページの基礎部分となる、フォームの生成と値の取得について記述していきます。
なお、他のサイトでよく利用されているHTMLファサード、FORMファサードはLaravel 5.4では標準インストールされていないため、色々とゴニョゴニョしないと利用できない模様。
実はこのゴニョゴニョしている最中にハマってしまい、プロジェクトを再作成するハメに。Versionが5.4にあがったのはそのせいおかげです。
今回はプレーンな状態のLaravelでフォームを作成していきます。ビギナーのためのLaravel入門を参考にさせていただきました。

今回編集するのは以下の3ファイル。

  • about.blade.php
  • PagesController.php
  • web.php

早速ソースコードを見ていきます。

ソースコード

about.blade.php
@extends('layout')
@section("content")
    <h1>Hello, {{$login}}.</h1>
@endsection

<form method="post" action='/about'>
    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> // *これを記述しないとCSRFチェックに引っかかる模様
    <input type="text" name="message" placeholder="write message.">
    <input type="submit">
</form>

*の部分を記述し忘れると、TokenMismatchException in VerifyCsrfToken.php line 68:とかいうエラーが表示されます。
こちらを参考にさせていただきました。

PagesContloller.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class PagesController extends Controller
{
    // getIndex : フォームに何も入力されていないときに表示
    public function getIndex()
    {
        $data = [];
        $data["login"] = "Please Login.";
        $data["message"] = 'please type message.';
        return view("pages.about", $data);
    }

    // フォーム側Submitボタンが押されたときに表示
    public function postIndex(Request $request)
    {
        $data = [];
        $data["login"]  = "Hello, Tetsuro Degawa.";
        $data['message'] = $request->input('message'); // フォームからPostされた値を取得
        return view("pages.about", $data);
    }
}
web.php
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
    return view('welcome');
});
Route::get("about", "PagesController@getIndex");
Route::post("about","PagesController@postIndex");

web.phpにgetとpostの処理を分けてあげたらフォームの値を取得できるようになりました。

テーブルの作成

概要

Laravelは直接テーブルを生成するのではなく、Artisanからマイグレーションファイルを作成します。
その後マイグレーションを実行することでテーブルが生成される、という流れのようです。
「マイグレーションファイル」がテーブルの設計書で、その設計書を元にテーブルを作成するのが「マイグレーション実行」ということのようです。難解。
マイグレーションが実行可能になるまで紆余曲折がありましたが、詳しい話はこちら(現在執筆中)をご覧ください。

構成


[sample]--artisan
 |
 +-[database]
    |
    +-[migrations]--{timestamp}_create_users_table

マイグレーションファイルの生成

console[/var/www/html/sample/]
# マイグレーションファイル生成
$ php artisan make:migration create_users_table

# マイグレーションファイルを確認
$ cd ./database/migrations/
$ ls

# vimでマイグレーションファイルを編集
$ vim {timestamp}_create_users_table.php

ここで中身を見てみると、関数が2つ生成されていました。
up()がテーブル生成や処理の追加、down()がテーブル削除や処理の取り消しを行っているようです。
今回はテーブルを生成する処理のため、up()内に追記していきます。

/var/www/html/sample/database/migration/{timestamp}_create_users_table
    // 修正前
    public function up()
    {
    }

    // 修正後
    public function up()
    {
        Schema::create('users' /* テーブル名 */, function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('user_name');
            $table->string('user_address');
            $table->string('user_photo');
        });
    }

マイグレーション実行

console[/var/www/html/sample/]
$ php artisan migrate

これでDBにテーブルが生成されました!確かに環境を構築するまでは大変だけど、一度作ってしまうと後がラクになりそうですね。
データベースとマイグレーションについてはReaDoubleさんに詳しい記述があります。

MySQLと連携して簡単なWebアプリを動かす

現在作業中です。

sample
foreach ($users as $user) {
    echo $user->name;
}

[http://blog.hrendoh.com/using-form-and-html-in-laravel5/]
[https://laravel10.wordpress.com/2015/03/08/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AElaravel-5-16-form%E3%81%AE%E4%BD%9C%E6%88%90/]

参考文献

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5