▶ 技術めも
Laravel 5.5 - Study
エラーが出たらまずは comporser 更新とキャッシュクリア
php composer.phar dump-autoload
php composer.phar update
php artisan view:clear;
php artisan cache:clear;
php artisan config:clear;
php artisan route:clear
data: {
_token: $("input[name=_token]").val()
}
site
lavarel5.5
https://readouble.com/laravel/5.5/ja/installation.html
Laravelで日付時刻の処理を書くならCarbon(カーボン)を使え
https://apecell.com/2016/02/08/id/219
【5.5対応】Laravel の Collection を使い倒してみたくなった 〜 サンプルコード 115 連発
https://qiita.com/nunulk/items/9e0c4a371e94d763aed6
初期構築
php composer.phar create-project laravel/laravel --prefer-dist night 5.5
マイグレーション
php artisan migrate
php artisan migrate:rollback
php artisan migrate:rollback --step=5
// マイグレーションファイル作成
php artisan make:migration create_users_table
記事詳細表示
Route::get('/posts/{id}', 'PostsController@show');
コントローラ
public function show($id) {
$post = Post::findOrFail($id);
return view('posts.show')->with('post', $post);
}
HTML
{!! nl2br(e($post->body)) !!}
HTML(導線)
<a href="{{ url('posts', $post->id) }}"></a>
<a href="{{ action('PostsController@show', $post->id) }}"></a>
// URL Encode
{{ urldecode(URL::route('press')) }}
暗黙的データひも付け(Implicit Binding)
Route::get('/posts/{post}', 'PostsController@show');
public function show(Post $post) {
return view('posts.show')->with('post', $post);
}
<a href="{{ action('PostsController@show', $post) }}"></a>
記事新規作成
HTML 入力フォーム エラー表示
<form method="post" action="{{ url('/posts') }}">
{{ csrf_field() }}
<p><input type="text" name="title" placeholder="enter title" value="{{ old('title') }}"></p>
@if($errors->has('title'))
<span class="error">{{ $errors->first('title') }}</span>
@endif
<p><textarea name="body" placeholder="enter body">{{ old('body') }}</textarea></p>
@if($errors->has('body'))
<span class="error">{{ $errors->first('body') }}</span>
@endif
</form>
@if (count($erros) > 0)
<div><ul>
@forach ($errors->all as $error
<li>{{ $error }}</li>
@endforeach
</ul></dev>
@endif
ルーティング
Route::get('/posts/create', 'PostsController@create');
Route::post('/posts', 'PostsController@store'); // doPost
バリデート
$this->validate($request, [
'title' => 'required|min:3',
'body' => 'required',
]);
DB保存
$post = new Post();
$post->title = $request->title;
$post->body = $request->body;
$post->save();
return redirect('/');
記事編集
HTML(導線)
// コントローラに Post モデルを渡せる
<a href="{{ acton('PostsController@edit', $post) }}" class="edit">[Edit]</a>
HTML
<form method="post" action="{{ url('/posts', $post->id) }}">
{{ csrf_field() }}
{{ method_field('patch') }}
<p><input type="text" name="title" placeholder="enter title" value="{{ old('title', $post->title) }}"></p>
@if($errors->has('title'))
<span class="error">{{ $errors->first('title') }}</span>
@endif
<p><textarea name="body" placeholder="enter body">{{ old('body', $post->body) }}</textarea></p>
@if($errors->has('body'))
<span class="error">{{ $errors->first('body') }}</span>
@endif
<p><input type="submit" value="SUBMIT"></p>
</form>
ルーティング
Route::get('/posts/{post}/edit', 'PostsController@edit');
Route::patch('/posts/{post}', 'PostsController@update');
コントローラ
public function edit(Post $post) {
retur view('post.edit')->with('post', $post);
}
public function update(Request $request, Post $post) {
$this->validate($request, [
'title' => 'required|min:3',
'body' => 'required',
]);
// DB更新
$post->title = $request->title;
$post->body = $request->body;
$post->save();
return redirect('/');
}
独自リクエストクラス
php artisan make:request PostRequest
→ app/Http/Requests/PostRequest.php
public function authorize() {
return true; // 認証なし
}
public function rules() {
return [
'title' => 'required|min:3',
'body' => 'required',
];
}
public function messages() {
'title.required' => 'タイトル入れなさい',
}
コントローラー
use App\Http\Requests\PostRequest;
public function update(PostRequest $request, Post $post) {
// DB更新
$post->title = $request->title;
$post->body = $request->body;
$post->save();
return redirect('/');
}
追記めも
ディレクトリパーミッション
Laravelをインストールした後に、多少のパーミッションの設定が必要です。storage下とbootstrap/cacheディレクトリをWebサーバから書き込み可能にしてください
chmod 777 storage
chmod 777 bootstrap/cache
seed追加等でオートロードの更新が必要
php composer.phar dump-autoload