2

皆さん。私はちょっとルートに行き詰まっています

トップナビゲーションに検索フォームがあります。

<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>

したがって、リクエストを行うと、URLは次のようになります

fuelphp.dev/search/?q=qwerty

これは問題ありません。その URL を使用すると、ユーザーは、action_index()

ただし、ユーザーがfuelphp.dev/search/(パラメーターなしで) にアクセスすると、によって提供される「高度な検索フォーム」が表示されます。action_advanced()

Controller_Search はすでに作成しました

classes/controller/search.php (コントローラー)

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に追加すると、正しく機能しません。

Requestinもfuelphp.dev/search/?q=qwertyトリガーaction_advanced()しますがController_Search、トリガーする必要がありますaction_index()

これを機能させるには、ルート(またはコントローラーロジック)をどのように書き直す必要がありますか?

アップデート:

解決策が見つかりました!ルート構成は必要ありません!

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);
}

しかし、あなたの一人が「より良い」方法を持っているなら、私はそれを見てうれしいです.

4

1 に答える 1

1

名前付きパラメーターを使用して、そのうちの 1 つに2 つのルートを追加してみてください。

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

したがって、パラメータがある場合は指定さsearch/indexれたパラメータに移動しますが、パラメータがない場合はにルーティングされますsearch/advanced

次にsearch/index、検索パラメーター(q)を取得できます$this->param('q')

于 2012-12-13T17:24:01.737 に答える