Skip to content

Модуль для работы с местоположениями. realweb.api.location

Совместимость

realweb.api v.6

Требования

модуль sale

Местоположения

Основные ORM классы для работы с местоположениями.

По умолчанию база данных принимает следующие параметры

  • id - ID местоположения
  • type - Символьный код типа местоположения
  • language_id - язык (несмотря на название, это строка, например "ru")

Получение имен(переводов) местопложений может осуществляться 2мя различными способами

1 Способ. Отдельным запросом.

Данный способ подходит, если производятся манипуляции с ограниченным набором. По умолчанию. Перед кешированием коллекции необходимо выполнить получение имен

php
$obCollection = Location\Database::getObjectCollection($obNav);
$obCollection->processNames();

2 Способ. С основным запросом.

Данный способ подходит, если производятся манипуляции со всем набором местоположений. Активация этого способа происходит объявлением параметра with_names. В этом случае выполнять processNames нет необходимости.

php
$obCollection = Database::getObjectCollection(
		(new Pagination())
		->setParam('with_names', true)
		);

Коллекция всех имен местоположений для одного метоположения находится в коллекции _names

Также имеется 2 магических метода для русского и английского языков, которые возвращают соответствующие сущности. При желании данные методы можно расширить и другими языками в дочернем классе

Магический метод может вернуть null

php
namespace Realweb\Api\Module\City\Model;

use Realweb\Api\Model\Location;

/**
 * Class \Realweb\Api\Module\City\Model\Entity
 *
 * @method Name\Entity getNameFr()
 */
class Entity extends Location\Entity
{
	public function toJson()
	{

		return array(
			'id' => (int) $this->getId(),
			'names' => $this->getNames()->toJson(), //Вся коллекция имен
			'name_ru' => $this->getNameRu()?->toJson(), //Только русский
			'name_fr' => $this->getNameFr()?->toJson(),
		);
	}

	protected static function _getDatabase(): string
	{
		return Database::class;
	}
}

Пример реализации

php
namespace Realweb\Api\Module\City\Controller;

use Realweb\Api\Model\Main\Cache;
use Realweb\Api\Model\Main\Pagination;
use Realweb\Api\Controller;
use Realweb\Api\Module\City\Model\Database;
/**
 * Class \Realweb\Api\Module\City\Controller\ItemsController
 */
class ItemsController extends Controller
{
	public function get(): array
	{
		return Cache::getInstance()
			->setId($this->getNav())
			->setDir(__CLASS__)
			->addTag(\Realweb\Api\Module\City\Model\Database::getCacheTag())
			->get(fn () => $this->_getList($this->getNav()))
		;
	}

	protected function _getList(Pagination $obNav): array
	{
		$obNav
			->setAllRecords(true)
			->setParam('language_id', 'ru')
			->setParam('type', 'CITY')
			->setParam('with_names', true)
		;
		$obCollection = Database::getObjectCollection($obNav);

		return $obCollection->toJson();
	}
}
php
namespace Realweb\Api\Module\City\Model;

use Realweb\Api\Module\Location;

/**
 * Class \Realweb\Api\Module\City\Model\Database
 */
class Database extends Location\Model\Database
{
	public static function getCollection(): string
	{
		return Collection::class;
	}

	public static function getEntity(): string
	{
		return Entity::class;
	}
}
php
namespace Realweb\Api\Module\City\Model;

use Realweb\Api\Module\Location;

/**
 * Class \Realweb\Api\Module\City\Model\Entity
 */
class Entity extends Location\Model\Entity
{
	public function toJson()
	{
		return array(
			'id' => (int) $this->getId(),
			'name' => (string) ($this->getNameRu()?->getName()),
		);
	}

	protected static function _getDatabase(): string
	{
		return Database::class;
	}
}

Репозиторий

Репозиторий модуля