演習課題「記事の削除機能を作る」
右の環境には、Laravelで「mydiary」というアプリケーションを作成してあります。「/diary/{id}」にDELETEメソッドでアクセスした時、指定の記事を削除してください。
記事の削除後は記事一覧のページへリダイレクトするようにしてください。
「/diary/{id}」へのルーティングはすでに作成してあり、ArticleControllerの「destroy」メソッドを呼び出すようになっています。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
※ 採点時は、サーバを起動し、問題文に関するページにアクセスできる状態にしてください。
#12:お店の情報を削除しよう
ここでは、Lunchmapアプリの削除機能を作成します。登録したお店情報を削除できるようにしましょう。
routes/web.phpRoute::get('/shops', 'ShopController@index')->name('shop.list');
Route::get('/shop/new', 'ShopController@create')->name('shop.new');
Route::post('/shop', 'ShopController@store')->name('shop.store');
Route::get('/shop/edit/{id}', 'ShopController@edit')->name('shop.edit');
Route::post('/shop/update/{id}', 'ShopController@update')->name('shop.update');
Route::get('/shop/{id}', 'ShopController@show')->name('shop.detail');
Route::delete('/shop/{id}', 'ShopController@destroy')->name('shop.destroy');
Route::get('/', function () {
return redirect('/shops');
});
app/Http/Controllers/ShopController.php: public function destroy($id)
{
$shop = Shop::find($id);
$shop->delete();
return redirect('/shops');
}
resources/views/show.blade.php@extends('layout')
@section('content')
<h1>{{ $shop->name }}</h1>
<div>
<p>{{ $shop->category->name }}</p>
<p>{{ $shop->address }}</p>
</div>
<div>
<a href={{ route('shop.list' )}}>一覧に戻る</a>
| <a href={{ route('shop.edit', ['id' => $shop->id]) }}>編集</a>
<p></p>
{{ Form::open(['method' => 'delete', 'route' => ['shop.destroy', $shop->id]]) }}
{{ Form::submit('削除') }}
{{ Form::close() }}
</div>
@endsection
### 公式・総論
Laravel - The PHP Framework For Web Artisans
https://laravel.com/
Laravel - ウェブ職人のためのPHPフレームワーク
http://laravel.jp/
Laravel ドキュメント
https://readouble.com/laravel/
Laravel - Wikipedia
https://ja.wikipedia.org/wiki/Laravel
### チュートリアル
Laravel入門: 初心者でも10分でWebサービスを作れる!
PHPフレームワークLaravelとPaizaCloudの使い方 - paiza開発日誌
https://paiza.hatenablog.com/entry/2018/02/16/paizacloud_laravel
Laravel学習帳 - はじめてのLaravel入門サイト -
http://laraweb.net/
Laravel5でシンプルなCRUDアプリを開発する - アシアルブログ
http://blog.asial.co.jp/1360
### データベースの準備
Eloquent:利用の開始 5.7 Laravel
https://readouble.com/laravel/5.7/ja/eloquent.html
Eloquent:リレーション 5.7 Laravel
https://readouble.com/laravel/5.7/ja/eloquent-relationships.html
Laravelでの基本的なリレーションシップもしくはJOIN - Qiita
https://qiita.com/zaburo/items/d665804f8ea850502c64
### ルーティング
ルーティング 5.6 Laravel
https://readouble.com/laravel/5.7/ja/routing.html
Laravelルーティングの基本とよく使われるルーティングパターン
https://www.ritolab.com/entry/119
### コントローラを作る
コントローラ 5.7 Laravel
https://readouble.com/laravel/5.7/ja/controllers.html
【Laravel入門】コントローラの作成とビュー表示 - Qiita
https://qiita.com/33yuki/items/7bab0d596ae9a0930f18
### 詳細ページを作る
URL生成 5.7 Laravel
https://readouble.com/laravel/5.7/ja/urls.html
### リレーション
【Laravel入門】リレーションとユーザーの一覧表示 - Qiita
https://qiita.com/33yuki/items/b7186f05d1c266076a35
Laravel5.4で基本的なリレーションを学んでみる | webOpixel
https://www.webopixel.net/php/1261.html
動画ではlaravel5.7を使用していますが、現在はより新しいLaravel5.8が公開されています。
`$ laravel new`で作成したプロジェクトはその時点で最新のLaravelがダウンロードされるため、時期によっては動画と全く同じコードでは無いかもしれませんが2019年3月現在大幅な変更はされていないので大きな影響はありません。
例えば、以下のような違いが見られる場合があります。
### artisan make:modelで作成したマイグレーションファイル
以前はidカラムがincrementsで定義されていましたが、新しくbigIncrementsで定義されるようになります。
これはデータベースのカラムの型に影響しincrements() : 符号なし4byte整数
bigIncrements() : 符号なし8byte整数
となります。
符号なし8byte整数(2\^64通り)は、符号なし4byte整数(2\^32通り)の2\^32倍 = 4,294,967,295倍もの空間を持っています。
bigIncrements()でIDを定義するとincrements()にくらべてこれだけの余裕ができ、より多くのデータを格納できるようになるというわけです。 public function up()
{
Schema::create('Shop', function (Blueprint $table) {
// ここがbigIncrementsになっている
$table->bigIncrements('id');
$table->timestamps();
});
}
### AppServiceProvider.phpの関数の順番が異なる
AppServiceProvider.phpの関数が動画と違う並び順になっている場合があります。
並び順が異なるだけでメソッドそのものは変わっていませんので、目的のメソッドの位置を確認してください。
paiza cloud向けのHTTPSの設定はboot()メソッドに記述します。class AppServiceProvider extends ServiceProvider
{
// メソッドの並び順が逆になっている
public function register()
{
//
}
public function boot()
{
//
}
}
### 404エラーのデザインが変わっている
404エラーが発生した場合(アクセス先のURLを間違えた場合など)に表示されてるエラーページのデザインがシンプルなものへ変更されました。
paizaラーニングの講座でも存在しないURLへアクセスすれば表示されますので、興味があれば確認してみましょう。
### laravelの更新情報(英語)
- [Release Notes - Laravel](https://laravel.com/docs/5.8/releases)
- [Laravel News](https://laravel-news.com/)