経緯と問題
現在、就活に向けての成果物制作のために以下のサイトを参考にして
PHPでログイン機能を実装するチュートリアル
ログイン機能を作ってる最中で、テンプレートエンジンの項目が出てきたので、Laravelの勉強を以下の3つのサイトでしていたのですが
Laravel5.7: usersのCRUD機能を実装する
Laravel入門 - 使い方チュートリアル -
Laravelで作るRESTなWebアプリ
ルーティングとコントローラーの部分のedit・updateのところでedit.blade.phpに書いたコードが反映されずに、白紙表示されてしまうのが解決できずに困っているので今回質問しました。
###試したこと
ルーティングは確認したところusermodel/{usermodel}/editだったので、アクセスはhttp://localhost:8000/usermodel/1/editとブラウザのURLに入れて行いました。
エラーコード等は表示されず、単なる白ページで表示されてしまいます。
Developerで確認したところ、edit.blade.phpが反映されておらず、Developerから直接HTMLを弄りedit.blade.phpのコードをそのまま貼り付けたら内容は反映された。
コード
app/code/Laravel/routes/web.php
php
1Route::resource('usermodel', 'UserModelController'); 2
app/code/Laravel/app/Http/Controllers/UserModelController.php
php
1<?php 2 3namespace App\Http\Controllers; 4 5use App\UserModel; 6use Illuminate\Http\Request; 7 8class UserModelController extends Controller 9{ 10 /** 11 * Display a listing of the resource. 12 * 13 * @return \Illuminate\Http\Response 14 */ 15 16 // 一覧表示 17 public function index() { 18 19 20 $usermodels = UserModel::all(); 21 22 return view('usermodel.index', compact('usermodels')); 23 } 24 25 /** 26 * Show the form for creating a new resource. 27 * 28 * @return \Illuminate\Http\Response 29 */ 30 31 /*1件のデータを新規作成。本来は必要がない(WebAPIにおいて、画面に登録フォームを表示する画面はいらないから)。 32 storeメソッドとセット。 33 */ 34 public function create() { 35 36 return view('usermodel.create'); 37 } 38 39 /** 40 * Store a newly created resource in storage. 41 * 42 * @param \Illuminate\Http\Request $request 43 * @return \Illuminate\Http\Response 44 */ 45 46 // createメソッドで飛ばされた先の実際の処理 47 public function store(Request $request) { 48 $usermodel = new UserModel; 49 50 // フォームから受け取った値をすべて格納する 51 $form = $request->all(); 52 53 // fill()->save();でフォームから受け取った値をもとに複数のカラムの値を更新・追加しセーブする。 54 // UserModelのprotect $fillableの項目も参照。 55 unset($form['_token']); 56 $usermodel->fill($form)->save(); 57 58 return redirect('usermodel/' . $usermodel->id); 59 60 } 61 62 /** 63 * Display the specified resource. 64 * 65 * @param int $id 66 * @return \Illuminate\Http\Response 67 */ 68 69 /* 70 レコード表示。indexと違ってidで紐つけて1件ずつ表示する。 71 テスト用としてviewはつくらず、返された連想配列を単に表示するだけにしている。 72 */ 73 public function show(UserModel $usermodel) 74 { 75 return view('usermodel.show', compact('usermodel')); 76 // オブジェクトを単なる連想配列として返すだけ。 77 // return $usermodels->toArray(); 78 } 79 80 /** 81 * Show the form for editing the specified resource. 82 * 83 * @param int $id 84 * @return \Illuminate\Http\Response 85 */ 86 87 // 更新処理。updateメソッドとセット 88 public function edit(UserModel $usermodel) 89 { 90 $usermodel = UserModel::findOrFail($usermodel); 91 92 view('usermodel/edit', compact('usermodel')); 93 } 94 95 /** 96 * Update the specified resource in storage. 97 * 98 * @param \Illuminate\Http\Request $request 99 * @param int $id 100 * @return \Illuminate\Http\Response 101 */ 102 103 // 更新処理 104 public function update(Request $request, UserModel $usermodel) 105 { 106 $usermodel->user_name = $request->user_name; 107 $usermodel->save(); 108 return redirect('usermodel/'.$usermodel->id); 109 } 110 111 /** 112 * Remove the specified resource from storage. 113 * 114 * @param int $id 115 * @return \Illuminate\Http\Response 116 */ 117 118 // 削除処理 119 public function destroy($id) 120 { 121 // 122 } 123} 124 125
app/code/Laravel/resources/views/usermodel/edit.blade.php
php
1@php 2 $title = __('Edit').': '.$usermodel->user_name; 3@endphp 4@extends('usermodel.layout') 5@section('content') 6<div class="container"> 7 <h1>{{ $title }}</h1> 8 <form action="{{ url('usermodel/'. $usermodel->id) }}" method="post"> 9 @csrf 10 @method('PUT') 11 <div class="form-group"> 12 <label for="user_name">{{ __('UserName') }}</label> 13 <input id="user_name" type="text" class="form-control" name="user_name" value="{{ $usermodel->user_name }}" required autofocus> 14 </div> 15 <button type="submit" name="submit" class="btn btn-primary">{{ __('Submit') }}</button> 16 </form> 17</div> 18@endsection 19
app/code/Laravel/resources/views/usermodel/layout.blade.php
php
1<!DOCTYPE html> 2<html> 3<head> 4 <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 5 <meta charset="utf-8"> 6 <meta lang> 7 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> 8 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> 9 <title></title> 10</head> 11<body> 12{{-- @section('content')~@endsectionで囲った部分が入る --}} 13@yield('content') 14</body> 15</html> 16
app/code/Laravel/app/UserModel.php
php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6use Carbon\Carbon; 7 8// 日付日時関係はcabornパッケージを使う 9 10class UserModel extends Model 11{ 12 // timestampsを無効化 13 public $timestamps = false; 14 15 // 使用するテーブルを指定 16 protected $table = 'usermodels'; 17 18 // fillセーブするために保存するカラム名を格納する。 19 protected $fillable = ['user_name','password','email']; 20} 21
就活のポートフォリオのためにログイン・新規登録・パスワードリセットを含んだ、スケジュール管理サイトを作ろうと思っていてLaravelにようやく手を付けられたので、このまま進めるためにもどなたかお力添え頂けると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/22 19:43
2019/10/22 20:30
退会済みユーザー
2019/10/23 16:46
2019/10/23 17:42