LoginSignup
1
1

More than 1 year has passed since last update.

Laravel 〜Laravelアプリ作成の流れ〜AWS Cloud9

Last updated at Posted at 2022-05-29

Laravelアプリ作成の流れ

今回はLaravel 6.x を使用

環境構築

AWS Cloud9を使用する。
無料枠であれば以下の様にすると良い。

Laravelインストール

インストール


# phpの設定を行う(yesかnoが表示されたら基本yes)
sudo amazon-linux-extras install php7.2=stable

sudo yum install php-cli php-common php-devel php-fpm php-gd php-mysqlnd php-mbstring php-pdo php-xml


# MariaDBの構築(MariaDBはMySQLの新しい版のようなもの)
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2

# MariaDBのインストール
sudo yum install -y mariadb-server


#Apache, MariaDBの起動対応
sudo systemctl start mariadb

sudo mysql_secure_installation
// Enter current password for root (enter for none): 
// 上記は空欄でそのままEnterでOK
// Set root password? [Y/n] 
// 上記以降はyで回答すればOK(パスワードは任意:ここではrootにしている)

#MaridaDBの自動起動を有効化する
sudo systemctl enable mariadb

sudo systemctl is-enabled mariadb

# Composerをインストール

curl -sS https://getcomposer.org/installer | php

sudo mv composer.phar /usr/bin/composer

composer

// 上記は3つの記述をまとめて記述(貼り付けをして実行可能。成功するとComposerの文字がターミナル上に表示される)
# Laravelをインストール
composer create-project laravel/laravel cms 6.* --prefer-dist

# cd cms
// cmsディレクトリへ移動する。このディレクトリにartisanがある。
// その為、artisanコマンドはこの階層で実行する。

# Composerコマンド実行する
sudo composer update

# サーバー起動
php artisan serve --port=8080

スクリーンショット 2022-05-28 18.04.57.png

サーバーが起動したら、cloud9の上記画像の画面右上の歯車の左下の斜め矢印を押し、別タブで画面を確認すると良い
Previewの[Preview Running Application]を選択
/resouces/views/welcome.blade.php を編集するとこの表示ページが編集できる。
ブラウザ・更新出来るか確認してみると良い。 

今回はLaravelの横に「6」を追記してみた

 <div class="title m-b-md">
    Laravel 6
</div>

自動Save設定

スクリーンショット 2022-05-28 18.09.02.png
cloud9の右上の歯車を押して上記画面の場所でAfter Delayを選択するとコードが自動で保存される様になる。

.envの設定

.envは隠しファイルの為、初期では表示されない。

上記から「Show hidden files」を選択し、選択する。

/cms/.envを編集する

ここにDB周りの設定を記入する
初期状態は以下

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel 
DB_USERNAME=root
DB_PASSWORD=

これを自身の環境に合わせて設定する。

# 例)
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=hogedb // 任意で設定
DB_USERNAME=root
DB_PASSWORD=root

DB作成

//mysqlログイン
mysql -u root -p 

// pass入力
root

// db名は任意
create database hoge_db;

※DBについて
AmazonLinux2で環境を作った場合、MariaDBは自動で起動する為、毎回DBを起動する必要はない。
AmazonLinux AMI(旧AmazonLinux1)の場合は毎回CLOUD9起動時に必要。

// db選択
use hoge_db;

// テーブル確認
show tables;

// テーブル内容確認
desc tabale名;

テーブル作成

今回はbooksテーブルを作成する
テーブルの作成はマイグレーションを使用

テーブル作成の方法は

  • 手順1 : php artisan make:migration create_〇〇s_tableを実行
    この記述によって、テーブルを作るための記述を行うファイルが作成される。
    ファイル生成場所:/cms/database/migrations/2022_05_28_032210_create_books_table.php
    マイグレーションファイルの作成
$ php artisan make:migration create_books_table
$ php artisan make:migration create_books_table --create=books

上記はどちらも同じ結果になる。
--create=booksは生成されたファイル内で作成するテーブル名を指定している
基本ファイル名と生成するテーブル名は同じにする方が管理しやすい為、ここの名前を分ける事はしなくて良いと思う。
NG_例)
php artisan make:migration create_books1_table --create=books2
※ファイル名は「2022_05_28_035104_create_books1_table」なのにmigrationして作成されるテーブル名は「books2」テーブルとなる。

「create_○○○_table」は生成されるマイグレーションファイル名の一部。
○○○の部分には作成するテーブル名を指定する。

**作成されるファイル

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateBooksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up() // migrateで実行される
    {
        Schema::create('books', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('item_name'); // 元々は無い記述(item_nameカラムをstring型で追加)
            $table->integer('item_number'); // 同上
            $table->integer('item_amount');// 同上
            $table->datetime('published');// 同上
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down() // rollbackで実行される
    {
        Schema::dropIfExists('books');
    }
}
  • 手順2 : php artisan migrate
    この記述によって「手順1」で作成したファイルの情報を元にDBのテーブルが作成される。

マイグレーションを戻したい時

作成したテーブルを削除したい時はphp artisan migrate:rollbackを使用する。
参考記事

モデルの設定

モデルの定義はEloquent ORMを使用。

Lravelの命名ルールに則して、テーブル名に対応した名前をつける(今回はBook)
※1. モデル名は頭文字を大文字にする
 2. 末尾に「s」はつけない
 (命名ルールを使用しないでどのテーブルと紐付かせるか任意で設定も可能)

生成されるファイル
php artisan make:model Bookを実行する。
ファイル生成場所:/cms/app/Book.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    //
}

その他のモデル設定方法

php artisan make:model Flight --migration
上記を実行すると

  • モデル用の/cms/app/Flight.php
  • テーブルマイグレーション用の/cms/database/migrations/2022_05_28_042514_create_flights_table.php
    が一度に生成出来る。

ルート定義

基本的なルーティング/cms/routes/web.phpに記載する。

↓初期のweb.phpの表記は以下

Route::get('/', function () {
    return view('welcome');
});

↓CRUDを意識した記載例は以下

use App\Book; // app/Book.phpを参照
use llluminate\Http\Request; // HTTPリクエストを扱う為等のメソッドを参照


// 本の一覧表示(books.blade.php)
Route::get('/', function () {
    return view('welcome');
});



// 本を追加
Route::post('/books', function (Request $request) {
        
});

// 本を削除
Route::delete('/book/{book}', function (Book $book) {
    
});```

### use を使用し参照する2つのクラスについて
```use llluminate\Http\Request;```については[こちらを参照する](https://readouble.com/laravel/6.x/ja/requests.html)



## ログイン認証機能
Laravelでは標準でログイン機能とユーザー登録機能がある
[参考ドキュメント](https://laravel.com/docs/6.x/frontend#introduction)

laravel/uiパッケージをインストール

composer require laravel/ui:^1.0 --dev

artisanコマンド実行

php artisan ui vue --auth

npmパッケージインストール

npm install

パッケージをビルド

npm run dev

ビュー

テンプレートの継承
ビューの作成

ファイルの場所

基本は/cms/resources/views/以下に設置する。
Laravelでは親(ベース)/子(パーツ)テンプレートという、テンプレートを効率よく管理・作成する方法が用意されている。
※ベーステンプレートは最初からあるわけではない
laravel/uiパッケージをインストールすると、その際、自動で作成される。

ベーステンプレートの場所

/cms/resources/views/layouts/app.blade.php

app.blade.phpがベーステンプレートになる
この場合、パーツテンプレートが
/cms/resources/views/welcome.blade.phpになる。

読み込みの考え方

コントローラーの「routes/web.php」で呼び出される際は、

  1. 「/cms/resources/views/welcome.blade.php」が読み込まれ
  2. 1の中の「/cms/resources/views/layouts/app.blade.php」が呼び出される

@yield('content') : ベーステンプレート

ベーステンプレートに記載の@yield('content')の部分にパーツテンプレートの@selection('content')@endsectionの記述を読み込ませる事が出来る。
※contentの部分は変更可能

@extends('layouts.app')

パーツテンプレートに記載の@extends('layouts.app')は「.」が「/」と解釈され、layouts/app.blade.phpを読み込むという意味となる。

@includeディレクティブ

@include(ディレクトリ名.ファイル名)で記述した箇所にファイルを読み込む

変数の使い方

  • Bladeテンプレートでは
    {{$hoge}}のようにエスケープつけて変数を記述する。
    XSS攻撃対策が上記ではなされる

  • なされない記述もある
    {!!$hoge!!}
    基本これは使わない。

  • {{$hoge or "デフォルト"}}この記述では変数hogeが定義されていれば変数を、そうでなければ「デフォルト」という文字を表示する様になる記述

JavascriptとCSSのファイルの場所はpublicフォルダ

読み込みにはasset()関数を使用する。
asset()関数はpublic以下を参照する。

例)public以下にassetsフォルダを作成した場合

<script src="{{assets('/assets/js/jquery.min.js')}}"></script>

assets()関数の第2引数にtrueを渡すと「https://」が付く。

※設定しない場合はfalseとなり、「http://」となる

<script src="{{assets('/assets/js/jquery.min.js',true)}}"></script>

バリデーション

参考
基本はroute/web.phpに記入していく

* 本を追加 
*/
Route::post('/books', function (Request $request) {
    
    // バリデーション 
    $validator = Validator::make($request->all(),[
        'item_name'=>'required|max:255',
        ]);
        
    // バリデーションエラー
    if ($validator->fails()) {
        return redirect('/')
        ->withInput()
        ->withErrors($validator);
    };
});

withInput()

フォームの入力値をセッションへフラッシュデータとして保持する。

例)

<input name="name名" value="{{old('name属性値')}}" >

とする事で、バリデーションエラーとなり、リダイレクトされた先のページでもそのエラー時のデータを保持し、表示する事が可能になる。

withErrors()

バリデーションのエラー内容をフラッシュデータとしてセッションへ保存し、どのテンプレートからでも$errors変数としてアクセスできる様にする。

これにより、errors.blade.phpを用意し

<!-- resources/views/common/errors.blade.php -->
@if (count($errors) > 0)
    <!-- Form Error List -->
    <div class="alert alert-danger">
        <div><strong>入力した文字の修正が必要です</strong></div> 
        <div>
            <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
            </ul>
        </div>
    </div>
@endif

上記の様に設定する事で、エラー時の処理が作れる。

1
1
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
1
1