Laravelを勉強しています。(Laravel8系使用)
表側はVueコンポーネントでページを作り、LaravelはAPIとして使用しています。
アカウントの検索機能を実装したいのですが、そこでRouteがうまく通っていないのかよくわからないエラーが出て困っております。
アドバイスいただけますと幸いです。
このように、Emailか名前をセットして、検索をクリックすると検索結果のデータを取得できるというところで、
検索ボタンをクリックしたところの処理がうまくいっていません…
###各コードとエラー
■検索ボタン部分 AccountSearch.vue
<template> <div class="mb-2"> <form method="post" onsubmit="return false;"> <div class="form-group row mt-4"> <div class="col-md-3"> <label class="col-form-label text-sm">▼Email{{ search_email }}</label> <div class=""> <input type="text" class="form-control text-sm form-control-sm" maxlength="30" v-model="search_email"> </div> </div> <div class="col-md-3"> <label class="col-form-label text-sm">▼名前{{ search_name }}</label> <div class=""> <select class="form-control text-sm form-control-sm" v-model="search_name"> <option class="text-sm" value="">-----</option> <option v-for="(name, index) in names" v-bind:value="name.value" :key="index"> {{ name.label }} </option> </select> </div> </div> </div> <button class="btn btn-outline-info btn-flat" @click="search" >検索</button> </form> </div> </template> <script> export default{ props: { }, data() { return { search_email: "", search_name: "", names: [ {label: "管理者", value: "管理者"}, {label: "一般", value: "一般"}, ] } }, mounted() { }, methods: { search: function() { const url = '/api/accounts/search'; alert(url); let params = new FormData(); params.append('search_email', this.search_email ?? ''); params.append('search_name', this.search_name ?? ''); axios.post(url, params, { headers: { 'Content-Type': 'application/x-www-form-urlencode', }, }) .then(response => { }); }, }, } </script>
※検索ボタンをクリックすると、searchメソッドが発動する。
■Route api.php
<?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\AccountController; Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); Route::get('/accounts', [AccountController::class, 'index']); Route::post('/accounts', [AccountController::class, 'store']); Route::get('/accounts/{id}', [AccountController::class, 'show']); Route::post('/accounts/{id}', [AccountController::class, 'update']); Route::post('/accounts/destroy', [AccountController::class, 'destroy']); Route::post('/accounts/search', [AccountController::class, 'search']);
■コントローラー AccountController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Admin; use Illuminate\Support\Facades\Hash; class AccountController extends Controller { public function index() { return Admin::all(); } public function store(Request $request) { //return Account::create($request->all()); テキストはこれだけ //同じメールアドレスがあるかチェック $same_account = Admin::where('email', $request->email)->first(); if($same_account) { return("既に同じメールアドレスが登録されています。"); } $account = new Admin(); $saved_account = $account->create([ 'name' => '一般', 'email' => $request->email, 'password' => Hash::make($request->password1), ]); return(1); } public function show($id) { $account = Admin::where('id', $id)->first(); return($account); } public function update(Request $request, $id) { $account = Admin::where('id', $id)->first(); //パスワードのセット if($request->password1 == null) { $save_password = $account->password; } else { $save_password = Hash::make($request->password1); } $account->update([ 'email' => $request->email, 'password' => $save_password, ]); return(1); } public function destroy(Request $request) { $account_id = $request->account_id; dd($account_id); } public function search(Request $request) { dd($request); $search_email = $request->search_email; $search_name = $request->search_name; $query = Admin::query(); if(!empty($search_email)) { $query->where('email', 'like', '%'.$search_email.'%'); } if(!empty($search_name)) { $query->where('name', $search_name); } $accounts = $query->paginate(15); } }
※検索ボタンをクリックすると、function:searchに行くようにしているつもりです。
検証のため、$requestをdd();しています。
■出ているエラー
Trying to get property 'password' of non-object", exception: "ErrorException"
function:searchではすぐにddしており、passwordなど使用していないのですが、、
なんとなく、function:updateにルートが通っているような気がします…
どうすれば正しいルートに通せるか・・・行き詰まっておりお知恵をお貸しいただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/17 08:15
2021/07/17 08:23
2021/07/17 08:30