Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Tutorial 4: Control Search and Filter Form

Tutorial 4: Control Search and Filter Form

On the Post Home Screen, the search and filter form is added by default. Following 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

Improve PostApi class and add 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 much follow standard "{resource_name}/search-form"
  • Method getSearchForm() handle API request and response the form's structure in JSON

 

Step 3: Configure Post Resource setting

Override method getMobileSettings in PostResource class allow us to configure for each resource. The code below configures to 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 render on Mobile App

Image AddedImage Added
 

Step 5: handle the search form submission

When a user uses the search or filter menu, The Mobile App will submit API request to Get All API with all form's parameters. All parameters auto-resolve and pass to the findAll() method as an array.