● 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"
↓ の時、この様なテーブル tweets が作成されます。
・【パターン2】
php artisan make:scaffold Tweet --schema="category_id:integer:unsigned, title:string:nullable, content:text:nullable"
↓ の時、この様なテーブル tweets が作成されます。
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
cp ./app/Http/Controllers/TweetController.php ./app/Http/Controllers/___`date "+%Y%m%d_%H%M%S"`___TweetController.php
rm ./app/Http/Controllers/TweetController.php
cp -R ./resources/views/tweets/ ./resources/views/___`date "+%Y%m%d_%H%M%S"`___tweets/
rm -rf ./resources/views/tweets/
php artisan make:scaffold tweet --schema="name:string, desc:string" --no-interaction
php artisan migrate:fresh