These are chat archives for PHPixie/Hotline

12th
Jun 2016
Vadim Meling
@Linfuby
Jun 12 2016 04:08
@dracony ты заведомо правильные данные подставляешь, поэтому и нет варнинга.
$this->data = array();
Попробуй так: (Ведь при вызове $slice->arrayData() без параметров $this->data должен быть null а не array())
        $this->data = null;
        $arrayData = $this->sliceData();
        $this->assertSame(null, $arrayData->get('param'));
        $this->assertSame(null, $arrayData->get('param.child'));
Vadim Meling
@Linfuby
Jun 12 2016 04:30
Вообще проблема именно в том, что вызывается array_key_exists без гарантий того что $this->data является массивом.
То же самое тут
Warning: array_key_exists(): The first argument should be either a string or an integer in \vendor\phpixie\orm\src\PHPixie\ORM\Data\Types\Map.php on line 22
Roman Tsiupa
@dracony
Jun 12 2016 07:51
ponjal
prosto u tebja v primere tak zhe:
$arrayData = $slice->arrayData(array());
Roman Tsiupa
@dracony
Jun 12 2016 08:07
вот теперь починил
и тест добавил
Vadim Meling
@Linfuby
Jun 12 2016 08:08
Отлично. А что на счет настроек модели. Все таки надо id же указывать? Вместо idField
хммм печалька
как правильно поступить то
поправить в конфиге
или в классе
Vadim Meling
@Linfuby
Jun 12 2016 08:12
Сейчас в доке написано idField. Ранее я использовал в таблицах поле id и поэтому не парился на этот счет. А тут в проекте для Joomla таблицы чужие и приходится прописывать id.
Сложно сказать как правильнее. Мне по факту не важно.
Roman Tsiupa
@dracony
Jun 12 2016 08:14
наверное тогда в классе лучше
Vadim Meling
@Linfuby
Jun 12 2016 08:14
И если говорить о Config то может в него передавать все параметры указанные в настройках модели?
Roman Tsiupa
@dracony
Jun 12 2016 08:15
не понял
типа дополнительніе какие-то сови?
свои*
ну сделать то не сложно
но зачем
с таким же успехом их можно прям в модели прописать
оно же меняться не будет
aaaaa
stop
Roman Tsiupa
@dracony
Jun 12 2016 08:20
я вспомнил зачем сделал просто id
Vadim Meling
@Linfuby
Jun 12 2016 08:20
Да. Итак есть таблица товаров. Для экспорта в csv нужно называть каждую колонку. По сути было бы не плохо указать такую настройку в настроках самой модели, чтобы можно было получить все настройки полей через репозиторий.
Да, по идее настройка статическая, но Config имеет свойство меняться $config->persist()
orm/models.php
<?php
return array (
  'product' => 
  array (
    'table' => 'l_products',
    'id' => 'product_id',
    'fields' => 
    array (
      'id' => 
      array (
        'name' => 'Идентификатор',
        'field' => 'id',
        'format' => 'n',
      ),
),
);
Roman Tsiupa
@dracony
Jun 12 2016 08:20
єто чтобі в будущем добавить возможность сложного ключа
с нескоьких полей
Vadim Meling
@Linfuby
Jun 12 2016 08:21
Ок. Тогда оаствляю id (Но Доку надо бы подправить)
Roman Tsiupa
@dracony
Jun 12 2016 08:23
поправил
так это получается конфиг експортера
а не модели
Vadim Meling
@Linfuby
Jun 12 2016 08:27
Ну да, Экспортера. Удобнее их прописывать у модели, так как ORM собственно подключается именно для Экспортера и не нужно будет городить передачу настроек в репозиторий, не нужно будет переопределять Wrappers'ы и т.д.
Roman Tsiupa
@dracony
Jun 12 2016 08:29
так тебе достаточно только один враппер переопределить
Vadim Meling
@Linfuby
Jun 12 2016 08:29
$orm->repository('product') ->config()->get('fields')
И всё. Никаких ORMWrappers никаких переопределенных конструкторов, никаких сущностей переопределять не нужно - бери и пользуйся
Roman Tsiupa
@dracony
Jun 12 2016 08:30
tak
a pochemu nje:
$exportConfig->slice($entity->modelName())->get('fields')
ничего совсем переопределять не надо
я хз просто есть ли смысл всегда тащить в каждую сущност слайс конфига
особенно считая что в 99% случаев это использовать не будут
Vadim Meling
@Linfuby
Jun 12 2016 08:35

Ок, тогда вопрос:

$repository1 = $orm->repository('product');
$repository2 = $orm->repository('product');

Будет создано 2 разных класса? Или оба будут ссылаться на один репозиторий?

Roman Tsiupa
@dracony
Jun 12 2016 08:36
репозиторий один
всегда
но тот же объект конфига попадает в модели, каких много
кстати если ты с джумой колдуешь
тебе может быть проще все делать с DI
чтобы зависимости получать
или это только база с нее?
Vadim Meling
@Linfuby
Jun 12 2016 08:40
Я если честно не особо понял как им пользоваться.
Я ORM в проект Joomla внес, потому что у Joomla нет его в принципе. А учитывая что я сейчас на работе общаюсь только с PHPixie то и в своих расширенях будет удобнее его использовать и поддерживать и вообще инструменты PHPixie конечно повеселее чем у Joomla (Особенно сравнивая Slice и \Joomla\Registry)
Про JTable вообще молчу. Хотя там есть удобная фишка (Особенно для миграции) получение всех полей таблицы (Вызывается SHOW FULL COLUMNS FROM table). В PHPixie можно получить только имена полей без доп. информации (тип поля, комемнтарий, значение пол умолчанию и т.д.)
Roman Tsiupa
@dracony
Jun 12 2016 08:43
угу
ну DI одна з фич
это статический доступ к зависимостям
то есть если тебе в далеком классе джумлы надо репозиторий products
ты сможешь
DI::orm()->repository('products')
DI::call('orm.repository', ['products'])
Vadim Meling
@Linfuby
Jun 12 2016 08:45
Ок. Подключать как доп. зависимость в composer?
То есть указывать и ORM и Config и DI?
Roman Tsiupa
@dracony
Jun 12 2016 08:45
composer require phpixie/orm
composer require phpixie/di
itd
ааа
понял о чем ты
сорри))
нет
создаешь свой класс
class MyDI extends \PHPixie\DI\Container\Root
{
    public function configure()
   {
       $this->build('slice', function() {
              return new \PHPixie\Slice();
        });
       $this->build('database', function() {
              $config = $this->slice()->arraySlice([/* DATABASE CONFIG */]);
              return new \PHPixie\Database($config);
        });
       $this->build('orm', function() {
              $config = $this->slice()->arraySlice([/* ORM CONFIG */]);
              return new \PHPixie\ORM($this->database(), $config);
        });
   }
}

// initialize the container
$container = new MyDI();
Roman Tsiupa
@dracony
Jun 12 2016 08:50
$container->database() === MyDI::database();
$query = MyDI::call('database.selectQuery') // вызов метода по цепочке
Vadim Meling
@Linfuby
Jun 12 2016 08:52
Ок может попробую
Roman Tsiupa
@dracony
Jun 12 2016 08:53
ну в любом случае
удачи тебе с джумлой
я хз что там разрабы курили
но у меня всегда от нее ощущение
что они очень сильно думали как лучше сделать
но при этом в жизни даже книги по ооп не видели
Vadim Meling
@Linfuby
Jun 12 2016 08:54
Главное у них есть платежеспособная аудитория, для которой самим написать расширение тяжело.
Roman Tsiupa
@dracony
Jun 12 2016 08:56
))
nado kstati dlja piksi platezhy zapilitj
sobolevna
@sobolevna
Jun 12 2016 17:30
Надо набрать рекомендаций для использования тех пакетов, которые умеют всё, чего не умеет PHPixie -- платёжная система, кэш, админка, фронт-энд и так далее