###趣旨
laravelでのCRUD構築を忘備録を兼ねて書きたいと思います。
※環境構築は今回飛ばします。(vagrantかdockerあたりでご準備ください)
###バージョン
laravel 5.7
PHP 7
###ファイル構成
主要なファイルは以下の通りです。
(今回は「blog」をルートファイルにしています)
blog
-app/ #console,Exceptions,Http,provider等主要な処理クラスがディレクトリの配下に存在
-artisan/
-bootstrap/ #アプリケーションで最初に実行される処理やオートローディング設定 -composer.json/
-composer.lock
-config/ #アプリケーションの設定値を記載したファイル
-database/ #データベース関連のファイル -package.json/
-phpunit.xml
-public/
-readme.md
-resources/ #ViewのテンプレートファイルやLESSやSASSなどメタ言語ファイルを配置
-routes #アプリケーションのルート定義ファイル
-server.php
-storage/
-tests/ #テストコードを記載
-vendor/
###ルーティング設定
以下が7つの基本ルーティングです。
(Controller名 @ アクション名)で書きます。
Route::get('blogs', 'BlogsController@index')->name('blogs.index');
Route::post('blogs', 'BlogsController@store')->name('blogs.store');
Route::put('blogs/{id}', 'BlogsController@update')->name('blogs.update');
Route::get('blogs/{id}', 'BlogsController@show')->name('blogs.show');
Route::delete('blogs/{id}', 'BlogsController@destroy')->name('blogs.destroy');
Route::get('blogs/create', 'BlogsController@create')->name('blogs.create');
Route::get('blogs/{id}/edit', 'BlogsController@edit')->name('blogs.edit');
resourceなら上記のルーティングを1行で書けます。
Route::resource('blogs', 'BlogsController')
ルーティング公式はこちらです。(laravel5.7 ルーティング)
https://readouble.com/laravel/5.7/ja/controllers.html
###コントローラ設定
コマンド操作でBlogsControllerを作ります。
$ php artisan make:controller BlogsController
まずは一覧表示部分(index)を記述します。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\blog; #使うモデルを指定
class BlogController extends Controller
{
public function index()
{
$blogs = Blog::all();
return view('blogs.index', [
'blogs' => $blogs,
]);
}
#下記に続く
return view の中では、
第一引数でblog.indexと表示したいViewを指定し、
第二引数である [‘blogs’ => $blogs] は blogs.index に渡すデータを指定します。
$blogs = Blog::all(); で blogのレコード全て取得することができます。
残りのfunctionも設定して行きます。
上から作成(create)、保存(store)、詳細(show)、編集(update)、更新(edit)、削除(destroy)機能です。
public function create()
{
$blog = new Blog;
return view('blogs.create', [
'blog' => $blog,
]);
}
public function store(Request $request)
{
$blog = new Blog;
$blog->fill( $request->all() );
$blog->save();
return redirect('/blogs');
}
public function show($id)
{
$blog = Blog::find($id);
return view('blogs.show', [
'blog' => $blog,
]);
}
public function edit($id)
{
$blog = Blog::find($id);
return view('blogs.edit', [
'blog' => $blog,
]);
}
public function update(Request $request, $id)
{
$blog = Blog::find($id);
$blog->fill( $request->all() );
$blog->save();
return redirect('/blogs');
}
public function destroy($id)
{
$blog = Blog::find($id);
$blog->delete();
return redirect('/blogs');
}
}
###モデル設定
コマンド操作でBlogのモデルを作ります。
$ php artisan make:model Blog --migration
<?php
namespace App;
use Illuminate\database\Eloquent\Model;
class blog extends Model
{
protected $table = 'blog';
}
上記でマイグレーションファイルも作成していると思いますが、「--migration」で作成していない場合は以下を実施
$ php artisan make:migration Blogs_table
public function up()
{
Schema::create('blogs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title');
$table->string('content');
$table->timestamps();
});
}
マイグレーションファイルの中身を記述したらマイグレートします。
$ php artisan migrate
マイグレーションの公式はこちらです。(laravel5.7)
https://readouble.com/laravel/5.7/ja/migrations.html
###ビュー設定
以下の所にファイルを作って、HTMLを書いて行きましょう。
laravelではテンプレートエンジンとして、blade.phpを使うことができます。
一覧ページ
/resources/views/blogs/index.blade.php
詳細ページ
/resources/views/blogs/show.blade.php
作成ページ
/resources/views/blogs/create.blade.php
編集ページ
/resources/views/blogs/edit.blade.php
###終わりに
ざっくり書いたので、補足事項や修正は随時行っていく予定です。
別の記事にも書くかもしれません。