Laravel PJAX 的路由行为不符合预期

Laravel routing behavior with PJAX not as expected

我正在从头开始构建我的第一个 lavavel 网站,我 运行 遇到了一些路由的行为问题。

这是我的路由文件的相关代码:

Route::get('work', 'PageController@work');
Route::get('work/{item}', 'PageController@workitem');

相关方法如下:

public function work() {
        return view('pages.work');
    }

    public function workitem($item) {
        $v = 'work.'.$item;
        if(view()->exists($v)) {
            return view($v);
        } else {
            return view('errors.noitem');
        }
    }

这里是我观点的相关部分:

@extends('layout')

@section('content')
...
<div class="workflex">
    <a class="workitem" href="/work/test"></a>
    <a class="workitem" href="/work/test2"></a>
</div>
<div id="loadContent" class="loadContent">
    @yield('insert')
</div>
...
@stop

值得一提的是,我打算用 PJAX 加载 individual workitem 页面。我认为 PJAX 基于 URL:

加载到 "insert" 部分
$(document).pjax('a.workitem', '#loadContent');

用户在 /work 子目录加载初始工作页面,然后单击一个按钮以使用 PJAX 加载 /work/item 页面。正如路由所建议的那样,我还希望用户能够将工作项输入 URL 并被定向到已加载该项目的工作页面。整个系统按预期运行......直到我将以下 jquery 添加到 work.blade.php:

$(document).ready(function() {  
        $('#loadContent').load("/work/init", function() {
            myFade('#loadContent > *', 1); //ignore this function, it's an animation irrelevant to my problem
        });
    });

这里是尝试在 PJAX loading div #loadContent 中加载初始消息,告诉用户 select 一个工作项。但是,这样做的一个副作用是,现在每当我直接浏览到 /work/item(PJAX 仍然正确加载页面)时,文档都会触发此 jquery 并且消息会覆盖页面内容。

我正在集思广益,让我的控制器中的 work() 方法触发加载此脚本或仅将 work/init 视图传递到 "insert" 部分的内容。

您认为解决此问题的最佳方法是什么?非常感谢您的回答。

我能够回答我自己的问题。我忘记了路由可选参数。我changed/added这些东西:

Route::get('work/{item?}', 'PageController@work');

在我的控制器中:

public function work($item = 'init') {
        $v = 'work.'.$item;
        if(view()->exists($v)) {
            return view($v);
        } else {
            return view('errors.noitem');
        }
    }

现在完美运行!