Silverstripe自定义控制器数据/变量

时间:2016-02-27 19:16:58

标签: php silverstripe

我尝试将搜索结果返回到新控制器,而不是执行搜索操作的位置。问题Results永远无法从CustomSearchResultPage.ss访问。我已经为我认为正在发生的事情添加了内联评论,我在这里思考的是正确的吗?

    // Customise content with results
    $response = $this->customise(array(
        'Results' => $results ? $results->getResults() : '',
    ));

    if ($results) {
        $response = $response->customise($results);
    }

    // Use CustomSearchResultPage.ss template
    $templates = array('CustomSearchResultPage', 'Page');

    // Create a new CustomSearchResultPage page
    $page = CustomSearchResultPage::get_one('CustomSearchResultPage');

    // Build a controller using the CustomSearchResultPage
    $controller = CustomSearchResultPage_Controller::create($page);

    // Add the custom data to the newly minted controller
    $result = $controller->customise($response);

    // Return the controller and tell it how to render
    return $result->renderWith($templates);

页面似乎按预期呈现,只是变量总是空的......

1 个答案:

答案 0 :(得分:0)

我担心你的解释有点难以理解。所以我正在回答我可以确定如下:

  1. 执行搜索。这需要加载控制器才能这样做。
  2. 使用结果自定义当前控制器
  3. RE - 自行清理当前控制器。
  4. 设置当前(双重自定义)控制器的模板。
  5. 忽略以上所有内容。
  6. 获取随机页面(或空记录)。
  7. 为空白页面创建控制器。
  8. 使用自定义的当前控制器的自定义控制器自定义新控制器。
  9. 返回该页面,但没有显示任何结果。
  10. 您只需在步骤4停止(跳过步骤3),然后返回自定义($ response)。

    如果有某种原因你认为你需要另一个控制器(这似乎是超级的,但谁知道),在返回它之前创建然后自定义那个(仅)将会更好。

    由于您只使用了第二个控制器来渲染结果,因此URL不会发生任何变化。整件事似乎超出了要求。

    从这个动作渲染结果的一种更简单的方法可能是:

    return $this ->customise(['Results' => $results ? $results->getResults() : null]) ->renderWith(['CustomSearchResultPage', 'Page']);

    (从我的头顶,可能需要一点精炼)。