Appearance
Модуль для работы с местоположениями. 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;
}
}