【问题标题】:How to use route for dependent relationship in octobercms?如何在octobercms中使用路由进行依赖关系?
【发布时间】:2019-03-18 11:04:23
【问题描述】:

我目前正在使用 ajax 数据请求处理前端表单。 In my code i have this in the php block that gets displayed in a partial when a category in select-box is selected to show subcategories.

function onChangeCat()
{
$this['subs'] = Cat::whereHas('parent', function ($query) use($cats){

 $query->where('cats','=', $cats );

})->pluck('cat_title', 'id'); 

我正在尝试将其连接到一条路线,以便当用户单击一个类别时,相关的子类别会显示在第二个选择框中。

这是我的路由文件,参数为#id of category select-box

Route::get('ajax/{cats}' , function () {

//
 return json_encode();
});

我如何连接 php 块中的代码和路由来工作,以便只显示相关的类别子类别?

【问题讨论】:

  • data request 不能与 routes 结合,按照设计 data request 将请求 当前 url 并从当前页面、布局、部分搜索 ajax-handlers [代码块] ( onXyz() ) 和in included components所以你不能在外部为数据请求 API 指定 URL[route],如果你想使用路由,那么你需要手动做 Ajax。
  • 有没有办法在没有路由的情况下将 id 传递给 onXyz()?
  • 添加了pass valueajax handler,的答案请查看

标签: php ajax laravel octobercms


【解决方案1】:

要将当前元素值传递给Ajax Handler,您需要给它name - attribute 并添加data-request="onChange" 处理程序。所有其他的东西都将由October CMS Ajax Api处理

<select name="country" data-request="onChange">
    <option id="1">A</option>
    <option id="2">B</option>
    <option id="3">C</option>
    <option id="4">D</option>
</select>

在您的 Ajax 处理程序中

function onChange() {
    $id = post('country'); // as we name it `country` for select
    // ^ - this will be your selected value [id]
    return ['data' => 'some data'];
}

进一步的过程数据[如果需要]否则你可以使用data-request-update="calcresult: '#result'"并返回Html Markup

<script>
function myFunction(data) {
    console.log(data)
}
</script>


<select 
   name="first" 
   data-request="onChange" 
   data-request-success="myFunction(data)">
...
</select>

success-full request 上,这将调用myFunction 并返回数据,在我们的例子中,它将是{'data':'some data'} JSON 对象,无论您从Ajax-Handler 返回什么。

如有任何疑问,请发表评论。

【讨论】:

    【解决方案2】:

    October CMS 有一个 $this-&gt;params() 方法,可以调用该方法从当前请求中获取 url 参数(参见 here)。您的代码应如下所示(未经测试):

    Route::get('ajax/{cats}' , function () {
        $results = Cat::whereHas('parent', function ($query) {
    
            $query->where('cats', $this->param('cats'));
    
        })->pluck('cat_title', 'id')->all(); 
    
        return $results;
    }
    

    【讨论】:

    • 谢谢,我的问题可能不是很清楚。问题可能应该是“如何使用路由创建依赖关系” 在我的代码中,我可以在 php 块中使用一个简单的查询,并使用 foreach 来填充类别。现在假设数据请求和 ajax 处理程序填充子类别。只想知道如何使用路由来做到这一点,以便只显示一个类别的相关子类别。
    • @OsujiKingsley 你需要实际的 ajax 功能吗?
    • 是的,我已经将data-request = onChangeCatdata-request-update="select: '#subcategory'"添加到我的类别选择中并进行了部分设置。想知道如何将data-request 连接到路由。
    • 您是否查看过data-request-update 属性,该属性将在成功时更新指定的部分?请参阅here 了解更多信息?
    • @OsujiKingsley 抱歉,我误读了您的最后一条评论,update 属性不起作用吗?
    猜你喜欢
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多