FuelPHP:尝试实施搜索。路线不起作用

时间:2012-12-13 14:38:42

标签: php frameworks url-routing fuelphp

人。我有点坚持路线

顶部导航中有一个搜索表单。

<form action="/search/" class="navbar-search pull-right">
    <input type="text" name="q" id="search-query" class="search-query span3" placeholder="Go for it...">
</form>

因此,如果我提出请求,则网址类似于

fuelphp.dev/search/?q=qwerty

哪个好。使用该网址,用户应获得action_index()

提供的请求的结果

如果用户转到fuelphp.dev/search/(没有任何参数),他/她应该会看到action_advanced()提供的“高级搜索表单”

我alredy创建了一个Controller_Search

classes / controller / search.php(Controller)

class Controller_Search extends Controller_Hybrid
{
    public function action_index() {

        $this->template->title = 'Results for &raquo; '.Input::get('q');
        $this->template->content = View::forge('search/index.twig');
    }

    public function action_advanced()
    {
        $this->template->title = 'Search &raquo; Advanced Search';
        $this->template->content = View::forge('search/index.twig', array(
            'advancedForm' => true
        ));
    }
}

views / search / index.twig(查看)

{% if advancedForm %}
    {% include 'advancedSearchForm.twig' %}
{% endif %}
<h4>Hello Template nesting :) </h4>

问题是 - 我不知道如何(重新)为此写路线。

如果我将'search' => 'search/advanced'添加到routes.php,它就无法正常工作。

请求fuelphp.dev/search/?q=qwerty也触发action_advanced() Controller_Search,而它应触发action_index()

我应该如何重写我的路线(或者可能是控制器逻辑)才能使其正常工作?

更新

找到了 solutuon !无需配置路由!

public function action_index() {
    if (Input::get('q')) {
        $viewTitle = 'Results for &raquo; '.Input::get('q');
        $viewData = null;
    }else{
        $viewTitle = 'Search &raquo; Advanced Search';
        $viewData = Array('advancedForm' => true);
    }

    $this->template->title = $viewTitle;
    $this->template->content = View::forge('search/index.twig', $viewData);
}

但如果你们中的一个人有“更好”的方式,我会很高兴看到它

1 个答案:

答案 0 :(得分:1)

尝试使用命名参数添加其中一个 2个路径

'search' => 'search/advanced',
'search/:q' => 'search/index/'

所以当它有一些参数带有给定参数的search/index时,如果你没有参数,它会路由到search/advanced

然后在search/index上,您可以使用q

获取搜索参数($this->param('q')