On the Post Home Screen, the Search and Filter forms are added by default. You can follow steps to control the Search form of each resource.
Step 1: Create PostSearchForm class to control search options
PostSearchForm.php
<?php namespace Apps\Posts\Api\Form; use Apps\Core_MobileApi\Api\Form\SearchForm; class PostSearchForm extends SearchForm { public function getSortOptions() { $sortOptions = parent::getSortOptions(); $sortOptions[] = [ 'value' => 'is_featured', 'label' => 'Is Featured' ]; return $sortOptions; } public function getWhenOptions() { return parent::getWhenOptions(); } }
Step 2: Create Get Search From API
Now, let's improve PostApi class by adding the following code
PostApi.php
<?php namespace Apps\Posts\Api\Service; use Apps\Core_MobileApi\Adapter\MobileApp\MobileApp; use Apps\Core_MobileApi\Adapter\MobileApp\MobileAppSettingInterface; use Apps\Core_MobileApi\Adapter\MobileApp\Screen; use Apps\Core_MobileApi\Adapter\Utility\UrlUtility; use Apps\Core_MobileApi\Api\AbstractResourceApi; use Apps\Posts\Api\Form\PostForm; use Apps\Posts\Api\Form\PostSearchForm; use Apps\Posts\Api\Resource\PostResource; class PostApi extends AbstractResourceApi implements MobileAppSettingInterface { public function __naming() { return [ 'post/search-form' => [ 'get' => 'getSearchForm' ] ]; } public function getSearchForm() { $form = $this->createForm(PostSearchForm::class, [ 'title' => 'search', 'method' => 'GET', 'action' => UrlUtility::makeApiUrl('post') ]); return $this->success($form->getFormStructure()); } /* other code... */ }
Explain the code above:
- Method __naming() of PostApi class allows defining more API routes, Route to Search form MUST follow standard "{resource_name}/search-form"
- Method getSearchForm() handles API request and returns the response with the form's structure in JSON
Step 3: Configure Post Resource setting
You can override method getMobileSettings() in PostResource class allows configuring each resource. The code below will change the placeholder string, modify sort and filter options
PostResource.php
<?php namespace Apps\Posts\Api\Resource; use Apps\Core_MobileApi\Api\Resource\ResourceBase; use Apps\Posts\Api\Form\PostSearchForm; class PostResource extends ResourceBase { public $resource_name = "post"; public $module_name = "post"; public $title; public $description; public $text; public function getMobileSettings($params = []) { $searchFilter = (new PostSearchForm()); $searchFilter->setLocal($this->getLocalization()); return self::createSettingForResource([ 'resource_name' => $this->resource_name, 'search_input' => [ 'placeholder' => 'Search Posts' ], 'sort_menu' => $searchFilter->getSortOptions(), 'filter_menu' => $searchFilter->getWhenOptions() ]); } }
Step 4: Test result on Mobile App
Step 5: Handle the search form submission
When a user uses the search or filter menu, the Mobile App will submit an API request to get All APIs with all form's parameters. All parameters are auto-resolved and passed to the findAll() method as an array.