Page tree

Versions Compared

Key

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

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

Code Block
<?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

Code Block
<?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

Code Block
<?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

Image Added          Image Added

 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.