【问题标题】:How to fix laravel 404 NotFoundHttpException Error?如何修复 laravel 404 NotFoundHttpException 错误?
【发布时间】:2020-01-14 11:11:12
【问题描述】:

我正在使用这个名为 yajra datables 的 laravel 包为我的应用程序创建一个数据表。但是每当我重新加载页面时都会收到此错误。几次重新加载后,表被加载。但是,每次我使用搜索选项时,页面都会向我抛出 ajax 错误。

我已经在互联网上搜索了所有可能的解决方案,但似乎没有一个可行。

下面是我的代码:

Index.blade

<script>
    $(document).ready(function(){
    $('#jobsTable').DataTable({
        processing: true,
        serverSide: true,
        ajax: "{{ route('activity.index') }}",
        dom: "B" + /* Buttons */
        "<'row'<'col-sm-12 col-md-6'l>" + /* Length changing input control */
            "<'col-sm-12 col-md-6'f>>" + /* Filtering Input */
                "<'row'<'col-sm-12'tr>>" + /* The Table! + Processing Display Element*/
                    "<'row'<'col-sm-12 col-md-5'i>" + /* Table Information Summary */
                        "<'col-sm-12 col-md-7'p>>" , /* Pagination Control*/
        columns:[
            /* 1 */ {data: 'id' , name: 'id', visible: false },
            /* 0 */ {data: 'action', name: 'action', orderable: false, searchable: false },
            /* 1 */ {data: 'job_id' , name: 'job_id' },
            /* 2 */ {data: 'type' , name: 'type' },
            /* 3 */ {data: 'job_no' , name: 'job_no' },
            /* 4 */ {data: 'deal_no' , name: 'deal_no' },
            /* 5 */ {data: 'cyc_no' , name: 'cyc_no' },
            /* 6 */ {data: 'deal_name' , name: 'deal_name' },

控制器

public function index()
    {
        if (request()->ajax()) {

            $jobs = Job::all();

            return DataTables::of($jobs)
                ->addColumn('action', function ($jobs) {
                    $button = '<div class="btn-group btn-group-xs">';
                    $button .= '<a href="/activity/' . $jobs->id . '/edit" class="btn btn-primary btn-xs"><i class="fa fa-edit fa-fw"></i>&nbsp;Edit</a>';
                    $button .= '<button type="button" name="deleteButton" id="' . $jobs->id . '" data-jobcycid="' . $jobs->job_no . ' | ' . $jobs->cyc_no . '" class="btn btn-danger btn-xs deleteButton"><i class="fas fa-trash-alt"></i>&nbsp;Delete</button>';
                    $button .= '</div>';
                    return $button;
                })
                ->rawColumns(['action'])

                ->setRowID(function ($jobs) {
                    return $jobs->id;
                })
                ->make(true);
        }

        return view('activity.index');
    }

路线

Route::group(['middleware' => ['auth.roles']], function () {

    /*Side bar menu Routes*/
    Route::get('/home', 'HomeController@index')->name('home');
    Route::get('/dashboard', 'HomeController@dashb')->name('dashboard');
    Route::get('/profile', 'HomeController@profile')->name('profile');

    /*Activity Routes*/
    Route::resource('/activity', 'JobController');
    // Route::get('/activity', 'JobController@getIndex')->name('activity.index');

    /*Activity Sub Routes*/
    Route::get('/jobEditCancel', 'JobController@jobEditCancel')->name('jobEditCancel');
    Route::get('/jobAddCancel', 'JobController@jobAddCancel')->name('jobAddCancel');



    // Route::get('/activity', 'JobController@index')->name('activity.index');
    // Route::delete('/activity/destroy/{id}', 'JobController@destroy')->name('activity.destroy');

    /*FPBlog Routes*/
    Route::resource('fpblog', 'PostController');
    Route::get('/postEditCancel', 'PostController@postEditCancel')->name('postEditCancel');
    Route::get('/blogManager', 'PostController@blogManager')->name('blogManager');
});

【问题讨论】:

  • 你能运行 (php artisan route:list) 命令并与我们分享结果吗?
  • 嗨@AhmedAtoui。请参考以下链接。非常感谢您的帮助。 photos.app.goo.gl/XeDrYf42TwQn1U1v5

标签: ajax laravel datatables yajra-datatable


【解决方案1】:

您使用的是url: "{{ route('activity.index') }}",但您在路由文件中注释了别名。

你可以像这样为资源路由设置别名

/*Activity Routes*/
Route::resource('activity', 'JobController', [
    'names' => [
        'index' => 'activity.index',
        'create' => 'activity.create',
        'store' => 'activity.store',
        'show' => 'activity.show',
        'edit' => 'activity.edit',
        'update' => 'activity.update',
        'destroy' => 'activity.destoy'
    ],
]);

这应该适用于您在刀片中使用别名 activity.index 的情况。

为什么没有resource 会更好?这主要是一种观点。 当您自己声明每条路线时,您可以更好地控制路线:

  • 每个路由都可以使用中间件
  • 无需检查控制器即可明确哪条路由有效
  • 根据需要命名方法/路线
  • ...等

【讨论】:

  • 嗨@N69S。非常感谢您对此事的兴趣。我在尝试调试时这样做了。这个问题来的时候是这样的,我不能用它作为资源路由吗?你有什么建议?
  • @Supunsam 我已经编辑了我的答案给你一个完整的答复。
  • 非常感谢@N69S ..您的建议很有教育意义。我对 laravel 还很陌生,这些提示意义重大。但是,我应用了您的路线,但问题仍然存在。也许这与我的开发环境有关。我使用 XAMPP。我不使用 Laravel Homestead 或类似的东西。
  • @Supunsam 检查您的.env 文件,您将看到APP_URL,将其设置为http://localhost:8000(带端口)并检查是否能解决您的问题。如果您仍然有问题,请检查如何在 XAMPP 上设置 vhost 以设置没有端口的域。但在此之前运行 php artisan route:list 以检查项目中声明的路由。
  • @Supunsam 你的问题有进展吗?
【解决方案2】:

感谢每一位努力支持我解决这个问题的人。但是,经过这么多的搜索,我已经想通了。

显然我的 URI 太长了。将开发环境迁移到 laravel Homestead 后,我能够理解这一点。

我已按照此博客上的步骤缩短网址。它解决了所有问题:

DataTables and Long URL

再次非常感谢任何提供意见的人。我希望这篇文章对尝试创建具有高列数的数据表的人有用。

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 2012-06-10
    • 1970-01-01
    相关资源
    最近更新 更多