douqiang4501 2018-05-24 05:27
浏览 14
已采纳

我只是无法在Laravel中删除我的一个用户地址

I'm having some problems when I'm going to delete one of my user's addresses. I want to let you know that the user has a relation One To Many with the table of Addresses.

Here, I'm just trying to delete the Address through his 'id', but it doesn't work.

UserController

<?php

namespace App\Http\Controllers;
use App\User;
use App\Address;
use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;

class UserController extends Controller
{
   public function deleteAddress(User $user, Address $address) {   
    $address->user->is($user); 

    $address->destroy();

    return redirect()->back();
  }
}

{Routes} Web.php

<?php


 Route::get('/', [
'uses' => 'ProductController@getIndex',
'as' => 'welcome.index'
 ]);

 Route::get('/products/{product}', [ 
'uses' => 'ProductController@showOne',
'as' => 'welcome.show'
 ]);


 Route::group(['middleware' => 'auth'], function() {
 Route::get('/user/profile', [
    'uses' => 'UserController@userProfile',
    'as' => 'user.profile'
 ]);

Route::get('/user/profile/account', [
    'uses' => 'UserController@userAccount',
    'as' => 'user.account'
]);

Route::patch('/user/profile/account/{user}/name-update',  [
    'uses' => 'UserController@nameUpdate',
    'as' => 'user.nameUpdate'
]);

Route::patch('/user/profile/account/{user}/email-update',  [
    'uses' => 'UserController@emailUpdate',
    'as' => 'user.emailUpdate'
]);

Route::patch('/user/profile/account/{user}/password-update',  [
    'uses' => 'UserController@passwordUpdate',
    'as' => 'user.passwordUpdate'
]);

Route::get('/user/profile/address', [
    'uses' => 'UserController@getAddress',
    'as' => 'user.address'
]);

Route::post('/user/profile/address/{user}/create', [
    'uses' => 'UserController@newAddress',
    'as' => 'user.newAddress'
]);

Route::post('/user/profile/address/{address}/delete', [
    'uses' => 'UserController@deleteAddress',
    'as' => 'user.deleteAddress',
]);

Route::get('/logout', [
    'uses' => '\App\Http\Controllers\Auth\LoginController@logout',
    'as' => 'logout'
]);
}); 

Auth::routes();

View

@extends('layouts.app')

@section('title')
Account
@endsection

@section('content')
<div class="row">
<div class="col-md-3">
    @include('partials.list-group')
</div>
<div class="col-md-8">
    <h3 class="pt-3">Manage your address</h3>
    <p>In order to create a quicker and simpler way of shopping, you can create and save your addresses. Enter and save yours.</p>
    <hr>
    <div class="full-name pt-3 col-md-12">
        @foreach(Auth::user()->addresses->chunk(3) as $addresses)
        <div class="row">
        @foreach($addresses as $address)
                <div class="col-md-4">
                    <div class="card mb-3">
                        <div class="card-header">
                            <div class="card-title">
                                <div class="delete-button">
                                    <form method="post" action="{{ Route('user.deleteAddress', $address) }}">
                                        {{ csrf_field() }}
                                        {{ method_field('delete') }}
                                        <button type="submit" class="btn btn-primary"><i class="fas fa-times"></i></button>
                                    </form>
                                </div>
                                <div class="address-user pb-2">
                                    <h6>{{ $address->first_name }} {{ $address->last_name }}</h6>
                                </div>
                                <div class="address-info">
                                    <p>{{ $address->street_address }}, {{ $address->street_address2 }}, {{ $address->city }}, {{ $address->country }}</p>
                                </div>
                                <div class="phone type-address">
                                    <p>Phone: {{ $address->phone_number }}</p>
                                    <p>Alt phone: {{ $address->phone_number2 }}</p>
                                    <p>Type: {{ $address->address_type }}</p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
        @endforeach
        </div>
        @endforeach
        <div class="row">
            <div class="col-md">
                <button class="btn btn-primary" role="button" data-toggle="collapse" href="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
                    <i class="fas fa-plus mr-2"></i> Add a new address 
                </button>
            </div>
        </div>
        <div class="row">
            <div class="col-md-12">
                <div class="collapse" id="collapseExample">
                    <hr>
                    <div class="card">
                        <form class="card-body" method="post" action="{{ route('user.newAddress', $user) }}">
                            {{ csrf_field() }}
                            <div class="form-group row">
                                <div class="col-md-6">
                                    <label for="firstName" class="col-sm-4 col-form-label text-md-left">{{ __('First name') }}</label>
                                    <div class="col-md-10">
                                        <input id="firstName" type="text" class="form-control" name="first_name" placeholder="First name" required autofocus>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <label for="lastName" class="col-sm-4 col-form-label text-md-left">{{ __('Last name') }}</label>
                                    <div class="col-md-10">
                                        <input id="lastName" type="text" class="form-control" name="last_name" placeholder="Last name" required autofocus>
                                    </div>
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-md-6">
                                    <label for="streetAddress" class="col-sm-4 col-form-label text-md-left">{{ __('First address') }}</label>
                                    <div class="col-md-10">
                                        <input id="streetAddress" type="text" class="form-control" name="street_address" placeholder="Street 123" required autofocus>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <label for="streetAddress2" class="col-sm-4 col-form-label text-md-left">{{ __('Other address') }}</label>
                                    <div class="col-md-10">
                                        <input id="streetAddress2" type="text" class="form-control" name="street_address2" placeholder="Apartment/Suite 00" required autofocus>
                                    </div>
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-md-6">
                                    <label for="country" class="col-sm-4 col-form-label text-md-left">{{ __('Country') }}</label>
                                    <div class="col-md-10">
                                        <select style="height:38px" name="country" id="country" class="col-md-12 col-form-label text-md-left">
                                            <option value="COL">Colombia</option>
                                            <option value="USA">United States</option>
                                            <option value="MEX">Mexico</option>
                                        </select>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <label for="stateProvince" class="col-sm-4 col-form-label text-md-left">{{ __('State/Province') }}</label>
                                    <div class="col-md-10">
                                        <input id="stateProvince" type="text" class="form-control" name="state_province" placeholder="California" required autofocus>
                                    </div>
                                </div>   
                            </div>
                            <div class="form-group row">
                                <div class="col-md-6">
                                    <label for="city" class="col-sm-4 col-form-label text-md-left">{{ __('City') }}</label>
                                    <div class="col-md-10">
                                        <input id="city" type="text" class="form-control" name="city" placeholder="San Francisco" required autofocus>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <label for="phoneNumber" class="col-sm-4 col-form-label text-md-left">{{ __('Phone number') }}</label>
                                    <div class="col-md-10">
                                        <input id="phoneNumber" type="text" class="form-control" name="phone_number" placeholder="000-000-0000" required autofocus>
                                    </div>
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-md-6">
                                    <label for="phoneNumber2" class="col-sm-5 col-form-label text-md-left">{{ __('Alternate phone') }}</label>
                                    <div class="col-md-10">
                                        <input id="phoneNumber2" type="text" class="form-control" name="phone_number2" placeholder="000-000-0000" required autofocus>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <label for="addressType" class="col-sm-4 col-form-label text-md-left">{{ __('Address type') }}</label>
                                    <div class="col-md-10">
                                        <select style="height:38px" name="address_type" id="addressType" class="col-md-12 col-form-label text-md-left">
                                            <option value="Home/House">House/Home</option>
                                            <option value="Business/Office">Office/Business<option>
                                        </select>
                                    </div>
                                </div>
                            </div>
                            <div class="container">
                                <div class="form-group row">
                                    <div class="col-md">
                                        <a class="text-dark mr-2" style="cursor:pointer"  data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample"><u>Cancel</u></a>
                                        <button type="submit" class="btn btn-primary">Save</button>
                                    </div>
                                </div> 
                            </div>   
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</div>
@endsection

Every kind of help is welcomed.

Throwing this error

  • 写回答

3条回答 默认 最新

  • douzhi3779 2018-05-24 16:19
    关注

    If you are using POST request, adding address in the route doesn't make sense.

    Edit your route to below

    Route::post('/user/profile/address/delete', [ 'uses' => 'UserController@deleteAddress', 'as' => 'user.deleteAddress', ]);

    instead of

    Route::post('/user/profile/address/{address}/delete', [ 'uses' => 'UserController@deleteAddress', 'as' => 'user.deleteAddress', ]);

    In your blade file, you can add a hidden input field which carries the id.

    <form method="post" action="{{ Route('user.deleteAddress') }}">
    {{ csrf_field() }}
    <input type='hidden' value='{{ $address->id }}' name='address_id' />
    <button type="submit" class="btn btn-primary"><i class="fas fa-times"></i></button>
    </form> 
    

    In UserController, you can find an address by it's id and delete it.

    <?php
    
    namespace App\Http\Controllers;
    use App\User;
    use App\Address;
    use Illuminate\Http\Request;
    use App\Http\Requests;
    use Auth;
    
    class UserController extends Controller
    {
       public function deleteAddress(Request $request) {   
        $address_id = $request->input('address_id');        
        $address = Address::find($address_id);
    
        if(!empty($address) && $address->user_id === Auth::user()->id){
            // for security- to make sure the delete request is valid and coming from the owner of the address.
           $address->delete();
        }
    
        return redirect()->back();
      }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 对于这个复杂问题的解释说明
  • ¥50 三种调度算法报错 采用的你的方案
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败