【问题标题】:Laravel 5.2 delete function gave me NotFoundHttpExceptionLaravel 5.2 删除功能给了我 NotFoundHttpException
【发布时间】:2017-09-05 18:45:52
【问题描述】:

我正在使用 Laravel 5.2 并尝试添加和删除我已经输入的数据,但是当我单击“删除”按钮时,它给了我 NotFoundHttpException。

这是我在控制器中删除功能代码的示例:

    <?php
namespace App\Http\Controllers\Track;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redirect;
//use Illuminate\Support\Facades\Input;
use Validator;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Track as Track;

class TrackController extends Controller
{
    /*Display track registry*/
    public function index()
    {
        $data = array('track' => Track::all());
        return view('admin.dashboard.tracks.track',$data);
    }

    /*Display create track form*/
    public function create()
    {
        return view('admin.dashboard.tracks.createtrack');
    }

    /*Save data form*/
    public function saveTrack(Request $request)
    {
        $input = $request->all();
        $messages = array(
            'trackCode.required'=>'Track code required.',
            'trackCode.unique'=>'Track code already exist.',
            'trackName.required'=>'Track name required.',
        );
        $rule = array(
            'trackCode' => 'required|unique:track',
            'trackName' => 'required|max:60',
        );

        $validator = Validator::make($input, $rule, $messages);

        if($validator->fails()) {
            #Directed to the same page with error message
            return Redirect::back()->withErrors($validator)->withInput();

            #Validate Success
        }

        $track = new Track;
        $track->trackCode = $request['trackCode'];
        $track->trackName = $request['trackName'];

        if (! $track->save())
            App::abort(500);

        return Redirect::action('Track\TrackController@index')->with('successMessage','Track data "'.$input['trackName'].'" has been inserted.');
    }

    /*Delete data*/
    public function delete($id)
    {
        echo $id;
        /*$trackCode = Track::where('trackCode','=',$id)->first();

        if($trackCode==null)
          App::abort(404);
        $trackCode->delete();

        return Redirect::action('track');*/
    }
}

这是我的删除选项代码的一部分:

<div class="box-body">
          <table class="table table-bordered table-striped">
            <thead>
            <tr>
              <th style="width: 150px; text-align: center;">Track Code</th>
              <th>Track Name</th>
              <th>Action</th>
            </tr>
            </thead>
            <tbody>
            @foreach($track as $itemTrack)
            <tr id="track-list" name="track-list">
              <td style="text-align: center;">{{ $itemTrack->trackCode }}</td>
              <td>{{ $itemTrack->trackName }}</td>
              <td><a href="{{{ action('Track\TrackController@delete',[$itemTrack->trackCode]) }}}" title="Delete" onclick="return confirm('Are you sure you want to delete this track : {{{$itemTrack->trackCode.' - '.$itemTrack->trackName }}}?')">
                    <span class="label label-danger"><i class="fa fa-trash"> Delete </i></span>
                  </a>                          
              </td>
            </tr>
            @endforeach
            </tbody>
          </table>
          <br/>
          <a href="{{{ action('Track\TrackController@create') }}}"><button class="btn btn-success pull-right" type="submit">Add Data</button></a>
        </div>
        <!-- /.box-body -->
      </div>
      <!-- /.box -->

每当它出现数据并且我尝试删除它时,它会转到一个页面并且出现 NotFoundHttpException 错误,而不是向我显示数据的 $id。

有人可以帮忙解释一下吗?谢谢

-编辑部分-

路线:

    <?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::group(['middleware' => 'web'], function()
{
    Route::auth();
});

//Route as admin
Route::group(['middleware' => ['web','role:admin']], function()
{
    Route::get('/users/dashboard', 'UserController@index');

    /*-----------------------------------------------Track Part---------------------------------------------------------*/

    /*Track index*/
    Route::get('/users/programs/track', array('as'=>'track', 'uses'=>'Track\TrackController@index'));

    /*Create track form*/
    Route::get('/users/programs/track/create', array('as'=>'track.create', 'uses'=>'Track\TrackController@create'));

    /*Route to save track*/
    Route::post('/users/programs/track/save', array('as'=>'track.save', 'uses'=>'Track\TrackController@saveTrack'));

    /*Delete track*/
    Route::get('/users/programs/track/{$id}/delete', array('as'=>'track.delete', 'uses'=>'Track\TrackController@delete'));

    /*-----------------------------------------------Course Part---------------------------------------------------------*/

    //Display course menu
    Route::get('/users/programs/course', array('as'=>'course', 'uses'=>'Course\CourseController@index'));

    //Delete course data
    Route::get('/users/programs/course/{$id}/delete', array('as'=>'course.delete', 'uses'=>'Course\CourseController@delete'));

    //Create course data
    Route::post('/users/programs/course/create', array('as'=>'course.create', 'uses'=>'Course\CourseController@createCourse'));

    //Edit course data
    Route::get('/users/programs/course/{$id}/edit', array('as'=>'course.edit', 'uses'=>'Course\CourseController@editCourse'));

    //Save editted course data
    Route::put('/users/programs/course/{$id}/saveEdit', array('as'=>'course.saveEdit', 'uses'=>'Course\CourseController@saveEdit'));
});

【问题讨论】:

  • 你能显示你的路线吗?

标签: php laravel rest laravel-5.2 laravel-routing


【解决方案1】:

用这个替换删除锚标记:-

<a href="{{ url('users/programs/track/'.$itemTrack->trackCode.'/delete') }}" title="Delete" onclick="return confirm('Are you sure you want to delete this track : {{{$itemTrack->trackCode.' - '.$itemTrack->trackName }}}?')">

并更改删除路线:-

Route::match(['get', 'post'], '/users/programs/track/{id?}/delete', 'Track\@TrackController@delete');

希望对你有帮助!

【讨论】:

    【解决方案2】:

    来自文档:

    "如果方法接受路由参数,你可以将它们作为第二个参数传递给方法:

    $url = action('UserController@profile', ['id' => 1]);"

    我猜“id”的定义不正确。试试这个:

    action('Track\TrackController@delete',['id' => $itemTrack->trackCode])

    【讨论】:

      【解决方案3】:

      试试这个:

      {!! action('track.delete',[$itemTrack->trackCode]) !!}

      【讨论】:

        【解决方案4】:

        我猜您在路由中使用了DELETE,这不适用于a 链接。您需要创建一个表单并欺骗DELETE。你可以在here找到更多关于这样做的信息。

        或者,您可以将Route::delete() 更改为Route::get(),但不建议这样做。

        【讨论】:

        • 我正在使用 Route::get() 之一,但我有点跳过或不可读的 TrackController 的删除功能
        【解决方案5】:

        我认为这可能与您的三重括号有关。请改用{{ action('Track\TrackController@create') }}

        更多信息请阅读link

        【讨论】:

        • 还是一样,仍然将我重定向到 NotFoundHttpException。
        猜你喜欢
        • 2017-03-18
        • 2016-06-17
        • 1970-01-01
        • 2023-03-31
        • 2016-09-15
        • 2017-01-16
        • 2016-07-01
        • 2016-11-10
        • 1970-01-01
        相关资源
        最近更新 更多