20200107のlaravelに関する記事は15件です。

Laravelの認可、ゲートとポリシーを使ったルーティングベースのシンプルな実装

Laravelで開発していて、認証(Authentication)はすぐに理解出来ても、認可(Authorization)はなかなか理解出来ませんでした。
自分の書き方と合ってないのか、どう認可を使えばいいのかわからなかった。
使っていくうちにだんだんと慣れてきましたが、それでも難しい。
そこで今回は、自分の知識の再確認のため、あるAPIを実行出来る権限がログインユーザにあるかどうかを、認可(ゲートとポリシー)を使って実装してみました。

https://laravel.com/docs/6.x/authorization
https://readouble.com/laravel/6.x/ja/authorization.html

使うLaravelのバージョンは6.8.0です。

システムの仕様

  • ユーザは権限を持つ。
  • APIは権限に対して認可されないと実行出来ない。
  • リレーションはuser -- role -< authorizations

データベース

usersテーブルにはuser_role_idカラムがある。

user_rolesテーブル

id name
1 管理者
2 スタッフ

user_role_authorizationsテーブル

id user_role_id route_name
1 1 user_index
2 1 user_create
3 2 user_index

テスト

以下の2つのテストが成功すれば完了とします。
上の表で、スタッフはuser_createへの権限がありません。
したがってtests/Feature/UserCreateTest.phpにおいて、スタッフでuser_createにAPIリクエストして403エラーが返ってくれば成功というわけです:thumbsup:

tests/Feature/UserIndexTest.php
<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use App\User;
use App\UserRole;

class UserIndexTest extends TestCase
{
    use RefreshDatabase;

    protected function setUp(): void
    {
        parent::setUp();

        $this->seed();
    }

    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function testAdmin()
    {
        $user = factory(User::class)->create(['user_role_id' => UserRole::ADMIN_ROLE_ID]);

        $response = $this->actingAs($user)->getJson('/api/user');

        $response->assertStatus(200);
    }

    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function testStaff()
    {
        $user = factory(User::class)->create(['user_role_id' => UserRole::STAFF_ROLE_ID]);

        $response = $this->actingAs($user)->getJson('/api/user');

        $response->assertStatus(200);
    }
}
tests/Feature/UserCreateTest.php
<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use App\User;
use App\UserRole;

class UserCreateTest extends TestCase
{
    use RefreshDatabase;

    protected function setUp(): void
    {
        parent::setUp();

        $this->seed();
    }

    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function testAdmin()
    {
        $user = factory(User::class)->create(['user_role_id' => UserRole::ADMIN_ROLE_ID]);

        $response = $this->actingAs($user)->getJson('/api/user/create');

        $response->assertStatus(405);

        $response = $this->actingAs($user)->postJson('/api/user/create');

        $response->assertStatus(200);
    }

    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function testStaff()
    {
        $user = factory(User::class)->create(['user_role_id' => UserRole::STAFF_ROLE_ID]);

        $response = $this->actingAs($user)->postJson('/api/user/create');

        // これが重要
        $response->assertStatus(403);
    }
}

ゲートとポリシー

まずポリシーを作ります。
ここで作るallow()メソッドは引数としてログインしたユーザを受け取ります(メソッド名はなんでも大丈夫)。
返り値はResponse::allow()で許可、Response::deny()で拒否です。

$ php artisan make:policy AllowRequestApi
app/Policies/AllowRequestApi.php
<?php

namespace App\Policies;

use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
use Illuminate\Auth\Access\Response;
use Route;
use Auth;

class AllowRequestApi
{
    use HandlesAuthorization;

    /**
     * Create a new policy instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * ログインユーザの権限をチェック
     *
     * @param User $user
     * @return Response
     */
    public function allow(User $user): Response
    {
        $route_name = Route::currentRouteName();

        if (!Auth::check()) {
            return Response::deny('権限がありません。');
        }

        $allowed = (bool)Auth::user()->role->authorizations->where('route_name', $route_name)->count();

        if ($allowed) {
            return Response::allow();
        } else {
            return Response::deny('権限がありません。');
        }
    }
}

作ったポリシーをサービスプロバイダで登録します。
このときにGate::define()を使います。

app/Providers/AuthServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        // 'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Gate::define('allow-request-api', 'App\Policies\AllowRequestApi@allow');
    }
}

登録したので、次はそのポリシーをルーティングで使います。
ミドルウェアの'can:allow-request-api'がそれです。不思議な述語になってしまったのは残念ですが。。。

routes/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');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::prefix('api')->middleware(['auth', 'can:allow-request-api'])->group(function () {
    Route::prefix('user')->group(function () {
        Route::get('/', 'UserIndex')->name('user_index');
        Route::post('create', 'UserCreate')->name('user_create');
    });
});

APIの説明は省略します。
1ファイル1メソッドのAPI(コントローラ)を作りたい場合は、--invokableオプションで作れます。

$ php artisan make:controller UserIndex --invokable
$ php artisan make:controller UserCreate --invokable

テスト実行

$ vendor/bin/phpunit tests/Feature/UserIndexTest.php 
PHPUnit 8.5.1 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 597 ms, Memory: 24.00 MB

OK (2 tests, 2 assertions)
$ vendor/bin/phpunit tests/Feature/UserCreateTest.php 
PHPUnit 8.5.1 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 188 ms, Memory: 24.00 MB

OK (2 tests, 3 assertions)

成功しました:beer:

まとめ

認可は他にも様々な書き方があります。
今回はルーティングベースの認可でしたが、モデルベースの認可もあります。
奥が深いです。
最高の認可を求める旅はまだまだ終わりません:bike::red_car::sailboat::airplane::rocket:

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel 日付関連の処理を施す

Carbonはphpに標準で存在するDateTimeクラスを拡張して、日付操作をより簡単にしてくれます。

まず、composerにCarbonをインストールしましょう。

composer self-update

//composer --versionでバージョンの確認ができます。

そしたら、composerにCarbonをインストールしましょう。

composer require nesbot/carbon

現在地点からの日時取得

hogehogeController.php
use Carbon\Carbon;

        // 現在日時
        $carbon_now = Carbon::now();
        // 昨日
        Carbon::yesterday();        
        // 今日
        Carbon::today();         
        // 明日
        Carbon::tomorrow();
        // 2年進める
        $carbon_now->addYears(2);
        // 2年戻る
        $carbon_now->subYears(2);
        // 2ヶ月進む
        $carbon_now->addMonth(2);
        // 2日進む
        $carbon_now->addDays(2);
        // 2時間戻る
        $carbon_now->subHours(2);
        // 平日で2日進む
        $carbon_now->addWeekdays(2);
        // 2週間進む
        $carbon_now->addWeeks(2);

こんな感じで簡単に色々できます。

参考にさせて頂いたサイト

https://leben.mobi/blog/php_date_carbon/php/

上記サイトにほとんど書いてあるので、参考にしてみましょう!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】何をやっても.envが反映されない時の対処法(備忘録)

事象

Laravelの.envやconfigを変更した際は、下記のコマンドを実行して変更を反映させるのが一般的ですが

console
    php artisan cache:clear
    php artisan config:cache

これらを実行しても.envやconfigの内容が反映されない場合は下記のファイル削除を行うと解決します。

結論

console
    rm -f bootstrap/cache/config.php

追記

今回の事象が発生したのは、.envへの値読み込みをコントローラ上で行っていたプロジェクトで発生しました。
そもそも、.envを直接コントローラやビュー等で参照するのがマズいらしく、envの値を参照する際は、必ずconfigファイルを挟んで行わなければならない。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

larave-adminでcheckboxをDBに保存

larave-adminはお手軽にさらっと管理画面を作れて便利です。
大まかな使用方法は他の記事にお任せするとしてcheckboxmultiselectなどをDBに保存するにはひと手間必要なので備忘録的メモです

公式に記述があります。二つあるようですが今回はデータをカンマ区切りで登録する方法です。
https://laravel-admin.org/docs/#/en/model-form-fields

class Post extends Model

    public function getTagsAttribute($value)
    {
        return explode(',', $value);
    }

    public function setTagsAttribute($value)
    {
        $this->attributes['tags'] = implode(',', $value);
    }
}

そのまま引用しています。get[elements]Attributeset[elements]Attributeをoverwriteしています。

マイグレーションはtextかvarcharあたりで

            Schema::create('post', function (Blueprint $table) {
                $table->bigIncrements('id');

                $table->text('tag');
                $table->timestamps();
                $table->softDeletes();

            });

これでDBにはカンマ区切りで保存されます

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel-adminでcheckboxをDBに保存

larave-adminはお手軽にさらっと管理画面を作れて便利です。
大まかな使用方法は他の記事にお任せするとしてcheckboxmultiselectなどをDBに保存するにはひと手間必要なので備忘録的メモです

公式に記述があります。二つあるようですが今回はデータをカンマ区切りで登録する方法です。
https://laravel-admin.org/docs/#/en/model-form-fields

class Post extends Model

    public function getTagsAttribute($value)
    {
        return explode(',', $value);
    }

    public function setTagsAttribute($value)
    {
        $this->attributes['tags'] = implode(',', $value);
    }
}

そのまま引用しています。get[elements]Attributeset[elements]Attributeをoverwriteしています。

マイグレーションはtextかvarcharあたりで

            Schema::create('post', function (Blueprint $table) {
                $table->bigIncrements('id');

                $table->text('tag');
                $table->timestamps();
                $table->softDeletes();

            });

これでDBにはカンマ区切りで保存されます

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel 6-Passport APIの主キーとしてのUUID

Laravel 6 - UUID as Primary Key for Passport API

チュートリアルを続けたくない場合は、このチュートリアルと同じ機能を備えたhttps://github.com/JamesHemery/laravel-uuidをいつでも使用できます

If you don´t want to follow the tutorial, you can always use https://github.com/JamesHemery/laravel-uuid which has the same functionality as this tutorial

laravelをインストールする

Install laravel

ユーザーテーブルの移行の変更

modify users table migration

$table->uuid('id')->primary();

パスポートをインストールする

Install Passport

移行を実行する

run migrations

composer laravel / dbalをインストールします

composer Install laravel/dbal

テーブルを変更する新しい移行を作成する

create a new migration to change table

Schema::table("oauth_access_token",function (Blueprint $table){
            $table->string("user_id")->change();
        });

移行を再度実行します

run migrations again

ユーザーモデル内に、以下を追加します

Inside the User Model, add the following

use Illuminate\Support\Str;


class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    public $incrementing = false;  //No more autoincrement field

    protected static function boot()
    {
        parent::boot(); // TODO: Change the autogenerated stub
        //Generate a new UUID when creating a new registry
        self::creating(function ($model){
            $model->id = (string) Str::uuid();
        });
    }
    ....
}

この部分を他のモデルで再利用可能にしたい場合は、特性を作成できます

If you want to make this part reusable for other models, you can create a Trait

app \ Traits \ HasUuid.phpにファイルを作成します

create a file in app\Traits\HasUuid.php

<?php
namespace App\Traits;

use Illuminate\Support\Str;

trait HasUuid{

    public function getIncrementing()
    {
        return false;
    }

    protected static function boot()
    {
        parent::boot(); // TODO: Change the autogenerated stub

        self::creating(function ($model){
            $model->id = (string) Str::uuid();
        });
    }

}

モデルでは、「HasApiToken」の横に新しい特性「HasUuid」を追加できます

In the model, next to HasApiToken you can add the new trait HasUuid

class User extends Authenticatable
{
    use HasApiTokens, Notifiable, SoftDeletes, HasUuid;
    ....

残りは、APIの作成方法に関する以前のチュートリアルに従うことができます

The rest you can follow my previous tutorials on how to create an API

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel + Nuxt ルート追加用メモ

※更新中

Laravel

モデル

php artisan make:model Post

-m オプションでマイグレーション・ファイルを同時に作成できる。

マイグレーション・ファイル

php artisan make:migration create_posts_table

マイグレート実行

php artisan migrate

ポリシー

php artisan make:policy PostPolicy

ポリシー登録

app/Providers/AuthServiceProvider.php
// 略

class AuthServiceProvider extends ServiceProvider
{
  protected $policies = [
    'App\User' => 'App\Policies\UserPolicy',
    'App\Post' => 'App\Policies\PostPolicy',
    // 'App\Model' => 'App\Policies\ModelPolicy',
  ];

// 略

リソース

php artisan make:resource Post
php artisan make:resource PostCollection

コントローラー

php artisan make:controller API/PostController --api --model=Post

ルート

routes/api.php
// 略

Route::namespace('API')->group(function () {
  Route::apiResource('posts', 'PostController');
}

// 略

Nuxt

ストア

store
└ posts
  ├ index.js
  ├ store.js
  ├ show.js
  ├ update.js
  └ delete.js
store/posts/update.js
export const actions = {
    request: async function ({ dispatch }, payload) {
        try {
            let response = await this.$axios({
                method: 'post',
                url: `/posts/${payload.params.id}`,
                data: {
                    _method: 'put',
                    title: payload.form.title,
                    text: payload.form.text,
                    tags: payload.form.tags
                }
            })

            let handledResponse = await dispatch('handleResponse', response)

            return handledResponse

        } catch (err) {
            // ??
        }
    },
    handleResponse: async function ({ commit }, response) {
        let handledResponse = { post: response.data.data }

        return handledResponse
    }
}

コンポーネント

components
└ posts
  ├ parts
  ├ requests
  │ ├ StoreButton.vue
  │ ├ UpdateButton.vue
  │ └ DeleteButton.vue
  ├ List.vue
  ├ Form.vue
  └ Full.vue
components/posts/requests/UpdateButton.vue
<template>
    <button-request class="bg-purple-500" @click="updatePost">Update</button-request>
</template>

<script>
import { mapActions } from 'vuex'

import ButtonRequest from '~/components/library/buttons/Request'

export default {
    props: {
        form: {
            type: Object,
            required: true
        }
    },
    methods: {
        ...mapActions({
            requestUpdatePost: 'posts/update/request'
        })
        updatePost: async function () {
            let payload = this.makePayload()
            try {
                let handledResponse = await this.requestUpdatePost(payload)

                this.$emit('updated', handledResponse)
            } catch (err) {
                //
            } finally {
                //
            }
        },
        makePayload: function () {
            let payload = {}

            payload.params = this.$route.params
            payload.form = this.form

            return payload
        }
    },
    components: {
        ButtonRequest
    }
}
</script>
components/posts/Form.vue
<template>
    <form class="flex flex-col bg-white">
        <div class="flex-grow-0">
            <input class="w-full" type="text" v-model="form.title" />
        </div>
        <div class="flex-grow">
            <textarea class="w-full h-full" v-model="form.text"></textarea>
        </div>
        <form-row class="flex-grow-0">
            <template v-if="create">
                <store-button :form="form"/>
            </template>
            <template v-else-if="edit">
                <update-button :form="form"/>
            </template>
        </form-row>
    </form>
</template>

<script>
import FormRow from '~/components/library/forms/FormRow'
import StoreButton from '~/components/posts/requests/StoreButton'
import UpdateButton from '~/components/posts/requests/UpdateButton'
import DeleteButton from '~/components/posts/requests/DeleteButton'

export default {
    props: {
        form: {
            type: Object,
            required: true
        },
        create: {
            type: Boolean,
            default: false
        },
        edit: {
            type: Boolean,
            default: false
        }
    },
    methods: {
        handleRequest: function (event) {
            this.$emit('request', event)
        }
    },
    components: {
        FormRow,
        StoreButton,
        UpdateButton,
        DeleteButton
    }
}
</script>

ページ

pages
└ posts
  ├ _id
  │ ├ index.vue
  │ └ edit.vue
  └ create.vue
pages/posts/_id/edit.vue
<template>
    <div>
        <post-form edit :form="form" />
    </div>
</template>

<script>
import PostForm from '~/components/posts/Form'

export default {
    data: function () {
        return {
            form: {
                title: '',
                text: ''
            },
            post: {
                title: '',
                text: ''
            }
        }
    },
    asyncData: async function ({ $axios, params, store }) {
        let handledResponse = await store.dispatch('posts/show/request', { params })

        return handledResponse
    },
    beforeMount: function () {
        this.form.title = this.post.title
        this.form.text = this.post.text
    },
    components: {
        PostForm
    }
}
</script>
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

クラスとは

「クラス」とは

よくPHPの学習サイトではクラスは設計図に例えられます。
オブジェクト指向とは設計図(クラス)からインスタンス(オブジェクト)を作ることを言います。
このことからわかるようにオブジェクト指向では 「クラス」 というものが基本になります。

クラスは class を使用して、以下の書式で作成します。

class クラス名 {
  実装したい処理
}

クラスが持つ変数をプロパティと呼びます。
クラスが持つ関数をメソッドと呼びます。

class Math {
  //プロパティを定義
  public $number1;
  public $number2;

  //メソッドを定義
  function add() {
  return $this->number1 + $this->number2;
  }
  function minus() {
  return $this->number1 - $this->number2;
  }
}

プロパティは

public どこからでもアクセスできる
protected そのクラスと、サブクラスからしかアクセスできない
private そのクラスからしかアクセスできない
で定義します。

× $this->$number1   〇 $this->number1

クラスが持つ関数、いわゆるメソッドはfunction で定義します。

クラス内でプロパティやメソッドを参照するときは、$ this という変数を使います。
$ this はメソッドの定義の中でのみ使用できる、特殊な変数です。
このときプロパティ名に$(ダラー)はつけません。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelのバリデーションで、正規表現のパイプが使えない件

Laravelのバリデーションで、正規表現のパイプが使えない件

Laravelのバリデーション

Laravelには、いくつかのバリデーションルールが用意されており、パイプ区切りで実行したいルールをvalidateメソッドへ渡すことで、複数のルールを利用することができる。

[バリデーションルールの例]

ルール 説明
email フィールドがメールアドレスとして正しいことをバリデートする
ipv4 フィールドがIPv4アドレスの形式として正しいことをバリデートする
required フィールドが入力データに存在しており、かつ空でないことをバリデートする
regex フィールドが指定された正規表現にマッチすることをバリデートする
sample.php
// バリデーションの利用例(パイプ区切り)
 $validateRules = [
    // 必須入力, 英数字のみ
    'user_name'=>'required|regex:/^[0-9a-zA-Z]+$/',
    // 必須入力, メールアドレス形式
    'mail'=>'required|email',
  ];

正規表現のパイプが使えない

通常、正規表現ではパイプ(|)を用いて「OR条件」を利用することができるが、Laravelでは複数のルールを区切るためにパイプを使うため、上記の書き方では正規表現のパイプを利用することができない。
バリデーションルールをパイプ区切りではなく、配列で書くことで正規表現のパイプを利用できるようにする。

sample.php
// バリデーションの利用例(配列)
 $validateRules = [
    // 必須入力, 「大阪」か「東京」のいずれかのみ
    'location'=>['required','regex:/(大阪|東京)/'],
  ];
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【 Laravel 】Laravel DB.comでCLUD『 表示・登録・更新・削除 』機能をCODEを書かず自動作成

Laravle DB.com は「 ER図 → CRUD生成 」までCODEを書かずに作成可能なツールです

以前にも書きましたが、Laravle DB.comでは「CRUD」のコードまで生成するようになりました。\(^o^)/

私の開発環境

  • Laravel5.5/PHP7.2.1/MySQL5.6.38 (Chromeで確認)

メリット

  • CRUDを自動生成!
  • 超便利! ER図を保存できるので、1度作ったものを別のアプリにも転用しやすい!
  • どのPCからでも同じデータを操作できる(ブラウザアプリだから)!

さあ、はじめて行きましょう!


【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png
この時点ではまだLOGINは作らないように!


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

welcome.blade.php
image.png

作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【 Laravel 】CLUD『 表示・登録・更新・削除 』機能をCODEを書かず自動作成

Laravle DB.com は「 ER図 → CRUD生成 」までCODEを書かずに作成可能なツールです

以前にも書きましたが、Laravle DB.comでは「CRUD」のコードまで生成するようになりました。\(^o^)/

私の開発環境

  • Laravel5.5/PHP7.2.1/MySQL5.6.38 (Chromeで確認)

メリット

  • CRUDを自動生成!
  • 超便利! ER図を保存できるので、1度作ったものを別のアプリにも転用しやすい!
  • どのPCからでも同じデータを操作できる(ブラウザアプリだから)!

さあ、はじめて行きましょう!


【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png
この時点ではまだLOGINは作らないように!


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

welcome.blade.php
image.png

作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【 Laravel 】CRUD『 表示・登録・更新・削除 』機能をCODEを書かず自動作成

Laravel DB.com は「 ER図 → CRUD生成 」までCODEを書かずに作成可能なツールです

以前にも書きましたが、Laravel DB.comでは「CRUD」のコードまで生成するようになりました。\(^o^)/

私の開発環境

  • Laravel5.5/PHP7.2.1/MySQL5.6.38 (Chromeで確認)

メリット

  • CRUDを自動生成!
  • 超便利! ER図を保存できるので、1度作ったものを別のアプリにも転用しやすい!
  • どのPCからでも同じデータを操作できる(ブラウザアプリだから)!

さあ、はじめて行きましょう!


【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png
この時点ではまだLOGINは作らないように!


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

welcome.blade.php
image.png

作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【 Laravel 】Laravel DB.comで『 CRUD簡単作成 』

Laravle DB.com を使って 「 ER図 → CRUD生成 」を試す!

前提条件

  • Laravelで環境を作ったことがある人(とりあえず動作するまで)
  • Laravelの基本を理解している人(つもりの人)
  • 確認環境:Laravel5.5/PHP7.2.1/MySQL5.6.38

【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【 Laravel 】Laravel DB.comで『 CRUD簡単作成 』を解説

Laravle DB.com を使って 「 ER図 → CRUD生成 」を試す!

以前にも書きましたが、Laravle DB.comでは「CRUD」のコードまで生成するようになりました。\(^o^)/

私の開発環境

  • Laravel5.5/PHP7.2.1/MySQL5.6.38 (Chromeで確認)

メリット

  • CRUDを自動生成!
  • 超便利! ER図を保存できるので、1度作ったものを別のアプリにも転用しやすい!
  • どのPCからでも同じデータを操作できる(ブラウザアプリだから)!

さあ、はじめて行きましょう!


【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png
この時点ではまだLOGINは作らないように!


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

welcome.blade.php
image.png

作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[AWS S3ファイルアップロード] Error retrieving credentials from the instance profile metadata server.

こちらのQiita記事を参考に、LaravelでAWS S3へ画像をアップロードする機能を実装しようとしていたら、以下のエラーが発生しました。

Aws\Exception\CredentialsException
Error retrieving credentials from the instance profile metadata server. (cURL error 7: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html))

スクリーンショット 2020-01-06 23.56.15.png

こちらのstackoverflowの回答の通り、以下のコマンドを叩いたら解決しました!!

$ php artisan config:clear

日本語での解説がなかったので、こちらでシェアします〜!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む