人。我有点坚持路线
顶部导航中有一个搜索表单。
<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 » '.Input::get('q');
$this->template->content = View::forge('search/index.twig');
}
public function action_advanced()
{
$this->template->title = 'Search » 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 » '.Input::get('q');
$viewData = null;
}else{
$viewTitle = 'Search » Advanced Search';
$viewData = Array('advancedForm' => true);
}
$this->template->title = $viewTitle;
$this->template->content = View::forge('search/index.twig', $viewData);
}
但如果你们中的一个人有“更好”的方式,我会很高兴看到它
答案 0 :(得分:1)
尝试使用命名参数添加其中一个 2个路径:
'search' => 'search/advanced',
'search/:q' => 'search/index/'
所以当它有一些参数带有给定参数的search/index
时,如果你没有参数,它会路由到search/advanced
然后在search/index
上,您可以使用q
$this->param('q')
)