質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

715閲覧

Undefined variable $user (View: C:\workspace\neomediaproject\resources\views\home.blade.php)

ingramzero

総合スコア16

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/12/22 19:19

編集2020/12/22 22:40

今ララベルを使ってユーザーの削除をユーザー自身で削除する機能を実装しているのですが、
Undefined variable $user (View: C:\workspace\neomediaproject\resources\views\home.blade.php) と出てしまい実装ができません。

念のため削除処理に必要な四つのファイルを載せます。

home.blade.php (ユーザーがログインしたときに表示されるページ)

@extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card" class="col-sm-offset-2 col-sm-8"> <div class="card-header">{{ __('Dashboard') }}</div> <div class="card-body">{{ Auth::user()->name }}</div> <div class="card-body">{{ Auth::user()->email }}</div> <div class="card-body">{{ Auth::user()->id }}</div> <form action="/"> <button type="submit" class="btn btn-light">記事一覧へ</button> </form> <!-- ユーザー情報を削除ボタン押したらtopに戻る。補足:できればパスワードを要求するusercontrolerを使うか?homeからできるならやる --> <!-- 削除ボタンを作る --> <form action="/{{$user->id}}" method="POST"> @method('DELETE') @csrf <button type="submit" class="btn btn-danger"><i class="fa fa-trash"></i>削除</button> </form> <div class="card-body"> @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }}  </div> @endif {{ __('You are logged in!') }} </div> </div> </div> </div> </div> @endsection

web.php ルーティング

<?php use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Route; use App\Models\Voting; use Illuminate\Http\Request; use App\Models\User; use App\Models\UserController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { /* Votingモデルを全て取得してトップページに表示する。 */ $votings = Voting::all(); return view('votings', ['votings' => $votings]); })/* ->middleware('auth') */; /* ログインするとトップページにいくこれをつかってマイページいける処理を書く */ Route::post('/voting', function (Request $request) { /* 有効なデータが入っているかどうかを確認するためにvalidatorを使う */ /* $requestから全てのデータを取得するその中のnameの属性に条件を指定する*/ $validator = Validator::make($request->all(), [ /* 入力必須255文字 form のnameパラメータを設定する*/ 'name' => 'required|max:255', ]); if ($validator->fails()) { return redirect('/') ->withInput() ->withErrors($validator); } /* votingモデルに新しいオブジェクトを追加する */ $voting = new Voting; /* votingモデルのtitleに$request->nameを格納する。 */ $voting->name = $request->name; //dd($request->name); //saveメソッド $voting->save(); /* トップページにリダイレクトして置く */ return redirect('/'); }); Route::delete('/voting/{voting}',function(Voting $voting){ $voting->delete(); /* トップページに置く */ return redirect('/'); }); Route::delete('/{id}', 'UserController@destroy')->where('id', '[0-9]+'); Auth::routes(); /* 第一引数でhomeを読んだときそのページに移動してから第二引数ホームコントローラを呼びその中のindexクラスを使う *indexクラスはyユーザーのビューを返す * */ Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); /* ユーザを削除するためのコントローラーとクラスを呼ぶ */

UserController.php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; class UserController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // User::destroy($id); return redirect('/'); } }


yyyy_mm_dd_create_user_table.php,

@<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } }

削除機能についていい方法があれば教えていただければ助かります、、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kai0310

2020/12/22 22:00

destroyをルーティングファイルの該当箇所で指定している様ですが、どの様な意図がありますか?
ingramzero

2020/12/22 22:42

エラー内容が変わりました、、 Route::delete('/{id}', 'UserController@destroy')->where('id', '[0-9]+');でコントローラのメソッドを利用し、ユーザ自身を削除しようとしています。
ingramzero

2020/12/22 22:42

エラー内容が二転三転してしまい申し訳ございません。
guest

回答3

0

ベストアンサー

home.blade.phpを表示する時に$userを渡してないだけ。
一番必要なHomeControllerが書かれてない。

public function index(Request $request) { $user = $request->user(); return view('home')->with(compact('user')); }

ログインしてるユーザー自身を削除ならコントローラーから渡す必要もなくこれでいい。

<form action="/{{ Auth::user()->id }}" method="POST">

上でAuth::user()->id使ってるんだから分かるはずだけど。

/直下で削除とかルーティングとしておかしいのでもう少し考えたほうがいい。

Route::delete('/user/{id}', 'UserController@destroy')->where('id', '[0-9]+');

投稿2020/12/23 01:58

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

php artisan serveを確認したところ、DELETEがなかったので一度キャッシュクリアしてもう一度確認したら削除機能を実装することができた。

投稿2020/12/27 13:06

ingramzero

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自分が実装しているCRUDからだとメソッドには何も記述しません(変数をオーバーライドさせるだけです)

PHP

1 2 public function destroy($id) 3 { 4 // 5 } 6

削除に関しては隠しメソッドを実装しているのでRESTful機能を使い、すぐできます。なのでblade側にこう実装するだけです(オーバーライドが必要なのでコントローラ側のメソッドの定義は必要だったはず)。

blade

1<form action="/任意のコントローラ名/{{$user->id}}" method="post"> 2<input type="hidden" name="_method" value="delete"> 3<button type="submit" class="bt_mini back_red bt_del" name="" value="削除">削除</button> 4</form> 5

Laravel5.2で削除機能をつける

投稿2020/12/23 00:38

編集2020/12/23 04:22
FKM

総合スコア3633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ingramzero

2020/12/23 00:50

回答ありがとうございます。ルーティングは特に設定しなくてもいいのでしょうか??
FKM

2020/12/23 01:09

他と同じレベルで問題ないです。show、create、editが使えるってことはそれらも隠しメソッドを使っているということなのでルーティングの調整は不要です。
ingramzero

2020/12/23 01:16

一応追加したのですが、押しても何も反応がありません、、 home.blade.php @extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card" class="col-sm-offset-2 col-sm-8"> <div class="card-header">{{ __('Dashboard') }}</div> <div class="card-body">{{ Auth::user()->name }}</div> <div class="card-body">{{ Auth::user()->email }}</div> <div class="card-body">{{ Auth::user()->id }}</div> <form action="/"> <button type="submit" class="btn btn-light">記事一覧へ</button> </form> <!-- 削除ボタンを作る --> <input type="hidden" name="_method" value="delete"> <button type="submit" class="btn btn-danger" name="" value="削除">削除</button> <div class="card-body"> @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }}  </div> @endif {{ __('You are logged in!') }} </div> </div> </div> </div> </div> @endsection
ingramzero

2020/12/23 01:17

また、この場合だと仮にユーザーを削除したとして、ページはユーザーのページのままなのでしょうか?
FKM

2020/12/23 01:23 編集

フォームの実装が必要です。忘れてましたので、回答に追記しています。 あと、削除を実行すると、すっとそのまま消えますので、メッセージで制御するには適宜javascriptなどで調節してください。
FKM

2020/12/27 23:54

自分が実装したシステムだと質問通り動いているので、なにか説明が不足していたってことですかね。 ま、出直しですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問