演習課題「記事の新規作成フォームを作る」
右の環境には、Laravelで「mydiary」というアプリケーションを作成してあります。「/diary/new」というルートにアクセスした時、記事の新規投稿フォームを表示してください。
この時、新規投稿フォームは、カテゴリを取得してcategoriesという名前で「new」ビューに渡してください。
なお、「/diary/new」へのルーティングは設定済みで、ArticleControllerのcreate()メソッドを呼び出すようになっています。
また、「new」ビューも用意してあります。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
※ 採点時は、サーバを起動し、問題文に関するページにアクセスできる状態にしてください。
#08:新規投稿フォームを作ろう
ここでは、お店情報を登録する投稿フォームを作ります。この投稿フォームでは、プルダウンリストでカテゴリを選択できるようにします。
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/{id}', 'ShopController@show')->name('shop.detail');
Route::get('/', function () {
return redirect('/shops');
});
app/Http/Controllers/ShopController.php:<?php
namespace App\Http\Controllers;
use App\Shop;
use App\Category;
use Illuminate\Http\Request; /**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$categories = Category::all()->pluck('name', 'id');
return view('new', ['categories' => $categories]);
}
resources/views/new.blade.php@extends('layout')
@section('content')
<h1>新しいお店</h1>
{{ Form::open(['route' => 'shop.store']) }}
<div class='form-group'>
{{ Form::label('name', '店名:') }}
{{ Form::text('name', null) }}
</div>
<div class='form-group'>
{{ Form::label('address', '住所:') }}
{{ Form::text('address', null) }}
</div>
<div class='form-group'>
{{ Form::label('category_id', 'カテゴリ:') }}
{{ Form::select('category_id', $categories) }}
</div>
<div class="form-group">
{{ Form::submit('作成する', ['class' => 'btn btn-outline-primary']) }}
</div>
{{ Form::close() }}
<div>
<a href={{ route('shop.list') }}>一覧に戻る</a>
</div>
@endsection
コレクション 5.7 Laravel
https://readouble.com/laravel/5.7/ja/collections.html
Laravel の Collection を使おう - Qiita
https://qiita.com/mikakane/items/76ae73990bf1ece9e7ae
動画では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/)