laravel5.5 , 5.6 でスキャフォールディングを行えるパッケージ laralib/l5scaffold をインストールする

● laravel5.5, 5.6 でスキャフォールディングを行えるパッケージ laralib/l5scaffold をインストールする

Laravelでは標準でスキャフォールディングのパッケージが存在しません。
(そのかわり有志の方が作成してくれています。お陰で似たようなパッケージが乱立していますが。)
今回は シンプルな scaffold を提供する l5scaffold をインストールして使用できるようにします。

composerのインストール、 Laravelのインストール、 laravelアプリの初期化 は省略します。
sshで該当のディレクトリへ移動するところからのスタート!です。
それではどうぞ!

1. laralib/l5scaffold のインストール

cd <YOUR-APP-NAME>
composer require 'laralib/l5scaffold' --dev

2. configに記述を追加

config/app.php‘providers’ の一番下に追加

// L5scaffold
Laralib\L5scaffold\GeneratorsServiceProvider::class ,

3. ソースを書き換えてlaravel5.5に対応させる

( ● 1つ目)vendor/laralib/l5scaffold/src/Commands/ScaffoldMakeCommand.php を書き換える

(5行目)    use Illuminate\Console\AppNamespaceDetectorTrait;
(21行目)    use AppNamespaceDetectorTrait, MakerTrait;

          ↓

(5行目)    use Illuminate\Console\DetectsApplicationNamespace;
(21行目)    use DetectsApplicationNamespace, MakerTrait;

(252行目)    以下のメソッドを追加
    public function handle()
    {
        return $this->fire();
    }

( ● 2つ目)vendor/laralib/l5scaffold/src/Makes/MakeController.php を書き換える

(4行目)    use Illuminate\Console\AppNamespaceDetectorTrait;
(13行目)    use AppNamespaceDetectorTrait, MakerTrait;

          ↓

(4行目)    use Illuminate\Console\DetectsApplicationNamespace;
(13行目)    use DetectsApplicationNamespace, MakerTrait;

↑この作業が面倒な方はこちらに更新済みファイルを置いておきますので

vendor/laralib/l5scaffold/src/Commands/ScaffoldMakeCommand.php
vendor/laralib/l5scaffold/src/Makes/MakeController.php

と入れ替えてください。
laralib_l5scaffold _差替えファイル「laralib_l5scaffold _replace.zip」

4. artisan コマンドに追加されたことを確認する

php artisan

make:scaffold Create a scaffold with bootstrap 3
が追加されていることを確認します。

5. スキャフォールディングの実行

お試しで [tweets] を追加してみます。

php artisan make:scaffold Tweet --schema="title:string:default('Tweet #1'), body:text"

追加されるファイル

# モデル
app/Tweet.php

# コントローラー
app/Http/Controllers/TweetController.php

# データベース(テーブル定義+テストデータ作成ファイル)
database/migrations/xxxx_xx_xx_xxxxxx_create_tweets_table.php
database/seeds/TweetTableSeeder.php

# ビューファイル( blade.php 形式のHTMLファイル)
resources/views/layout.blade.php
resources/views/tweets/index.blade.php
resources/views/tweets/show.blade.php
resources/views/tweets/edit.blade.php
resources/views/tweets/create.blade.php

6. マイグレーションファイルからDBテーブルを作成

php artisan migrate

7. routes/web.php にルーティングを追加

routes/web.php の一番下に追加します

Route::get('tweets/search', 'TweetController@search');
Route::resource('tweets', 'TweetController');

8. アクセスする

http://YOUR-WEB-SERVER/tweets

CRUD操作が自動で作成されていることを確認してください。

9. 作成されるテーブル

・【パターン1】

php artisan make:scaffold Tweet --schema="title:string:default('Tweet #1'), body:text"

 ↓ の時、この様なテーブルが作成されます。

・【パターン2】

php artisan make:scaffold Tweet  --schema="category_id:integer:unsigned, title:string:nullable, content:text:nullable"

 ↓ の時、この様なテーブルが作成されます。

10. DBテーブルの更新

作成したDBテーブル構造を更新し、あわせてビューも作り直したい時があります。
その時は以下の手順でDBテーブルやビューを更新することができます

・ 1.database/migrations/ の中から更新したいテーブルのマイグレーションファイルを削除する

残ったままだとエラーが出るので必ず削除する必要があります。
例)

rm ./database/migrations/2018_07_06_053954_create_tweets_table.php
・ 2. app/Http/Controllers/ の中から更新したいコントローラーファイルを削除する

コントローラーファイルがなぜか自動で更新されないので手動であらかじめ削除しておく必要があります。(更新する必要がない場合はそのままでOKです。)
例)

rm ./app/Http/Controllers/TweetController.php
・ 3. app/resources/views/tweets の中から更新したいビューがはいったディレクトリを削除する

更新したいビューがはいったディレクトリも削除しておく必要があります。(更新する必要がない場合はそのままでOKです。)
例)

rm -rf app/resources/views/tweets/
・ 4.artisan make:scaffold を 「–no-interaction」をつけて実行する

–no-interaction をつけると「上書きしますか?」を出さずに実行できます。

php artisan make:scaffold Tweet  --schema="category_id:integer:unsigned, title:string:nullable, content:text:nullable" --no-interaction
・5. php artisan migrate:fresh を実行する
php artisan migrate:fresh

以上です。

面倒ならシェルスクリプトでも用意しておくのがいいかと思います

scaffold_tweets.sh

rm ./database/migrations/*create_tweets_table.php
rm ./app/Http/Controllers/TweetController.php
rm -rf ./resources/views/tweets/
php artisan make:scaffold  tweet  --schema="name:string, desc:string"  --no-interaction  
php artisan migrate:fresh
laravel5.5 , 5.6 でスキャフォールディングを行えるパッケージ laralib/l5scaffold をインストールする
Tagged on:         

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA