@ryleigh
To create a search form in CakePHP, follow these steps:
Step 1: Create a Form in your View Create a form in your view with the input field for your search query. For example:
1 2 3 4 |
<?= $this->Form->create(null, ['type' => 'get', 'url' => ['controller' => 'Articles', 'action' => 'search']]) ?>
<?= $this->Form->input('q', ['label' => 'Search']) ?>
<?= $this->Form->button(__('Search')) ?>
<?= $this->Form->end() ?>
|
The form is created with Form->create(), and the input field for the search query is created using Form->input(). The form's method is set to GET, and the form action is set to the search action in the ArticlesController.
Step 2: Create the Search Action in your Controller Create a search action in your controller to handle the search query. For example:
1 2 3 4 5 6 7 8 9 |
public function search() { $query = $this->request->getQuery('q'); $articles = $this->Articles->find() ->where(['title LIKE' => '%' . $query . '%']); $this->set(compact('articles', 'query')); } |
This action retrieves the search query from the URL parameters, performs a search using the LIKE SQL operator, and passes the resulting articles and query back to the view using set().
Step 3: Display the Search Results in your View Display the search results in your view. For example:
1 2 3 4 5 6 7 8 9 |
<h2>Search Results for <?= h($query) ?></h2>
<ul>
<?php foreach ($articles as $article): ?>
<li>
<?= $this->Html->link($article->title, ['action' => 'view', $article->slug]) ?>
</li>
<?php endforeach; ?>
</ul>
|
This view displays the search query at the top, and then iterates over the resulting articles and displays them as links.
That's it! You now have a search form in CakePHP that searches for articles by title.