yii2 с планировщиком dhtmlx и выберите заполненный с сервера

Я пытаюсь заполнить раскрывающийся список выбора проекта данными с сервера. Я использую yii2.

Действие данных моего контроллера:

public function actionData()
{
    $list = new OptionsConnector(null, "PHPYii");
    $list->render_table("project", "id", "id(value),name(label)");
    $connector = new JSONSchedulerConnector(null, "PHPYii");
    $connector->set_options("project", $list);
    $connector->configure(
        new Booking(), "id", "start, end, activity, user, subsubproject, status, comment"
    );
    $connector->render();
}

Я получаю сообщение об ошибке:

Исключение «Ошибка» с сообщением «Вызов функции-члена find () в строке»

И я думаю, что эта строка является причиной: $connector->set_options("project", $list);

Что мне следует изменить?

ОБНОВЛЕНИЕ: Итак, я здесь:

public function actionData() {
    $list = new JSONOptionsConnector(null, "PHPYii");
    $list->enable_log("text1.log");
    $list->configure(
        new Subsubproject(),
            "-","id, name"
    );
    $list->render();
    $connector = new JSONSchedulerConnector(null, "PHPYii");
    $connector->enable_log("text2.log");
    $connector->set_options("subsubprojects", $list);
    $connector->configure(
        new Booking(),
            "id", "start, end, activity, user, subsubproject, status,comment"
    );
    $connector->render();
}

и я получаю это:

0: Object { key: undefined, id: 1, name: "Thing1", … }
​1: Object { key: undefined, id: 2, name: "Thing2", … }
​2: Object { key: undefined, id: 3, name: "Thing3", … }

У меня нет ключей... Как мне их получить? :)


person ps202    schedule 11.01.2019    source источник
comment
пожалуйста, выберите ответ, если он сработал для вас как хороший жест по отношению к пользователю, который дал вам немного свободного времени для решения ВАШЕЙ проблемы. Спасибо.   -  person Muhammad Omer Aslam    schedule 17.01.2019


Ответы (1)


1) Вам не нужно напрямую вызывать метод рендеринга JSONOptionsConnector. Его вызов завершает обработку запроса, если я не ошибаюсь, поэтому SchedulerConnector не действует. Попробуйте закомментировать строку $list->render();.

2) Формат ответа кажется немного неправильным. Это может быть ошибка PHPYii-обертки коннектора dhtmlx, я не уверен

Согласно исходным кодам клиент -side нужны свойства value и label из параметров, а обработчик возвращает id и name.

Вы можете попробовать следующее:

public function actionData() {
    $list = new JSONOptionsConnector(null, "PHPYii");
    $list->enable_log("text1.log");
    $list->configure(
        new Subsubproject(),
            "id","id(value), name(label)"
            // or 
            // "id(value)","id(value), name(label)"
    );

    $connector->enable_log("text2.log");
    $connector->set_options("subsubprojects", $list);
    $connector->configure(
        new Booking(),
            "id", "start, end, activity, user, subsubproject, status,comment"
    );
    $connector->render();
}

Это должно привести к ответу json, содержащему список заказов и подпроектов. Однако я не могу проверить этот код, так что что-то может быть не так. Вы можете попробовать и посмотреть, правильно ли выглядит результат JSON.

Если это вас не приблизит, я, честно говоря, буду создавать json вручную, а не использовать коннектор с оболочкой PHPYii. Таким образом, вы будете иметь прямой контроль над тем, что возвращается с вашего контроллера, и у вас не будет другого черного ящика.

Вам нужно будет вернуть JSON следующей структуры из вашего действия: https://docs.dhtmlx.com/scheduler/data_formats.html#jsonwithcollections

так что у вас будет что-то вроде этого в вашем действии:

return $this->asJson([
  "data"=> $preparedEventsArray
  "collections" => [
      "subprojects"=> $preparedSubprojects
   ]
]);

где $preparedEventsArray — это массив объектов событий, как показано в документах, а $subprojects — ваши объекты значения/метки

Обратите внимание, что имена свойств в коллекции data — «id», «start_date», «end_date», «text» — являются обязательными, вам нужно будет сопоставить свою модель данных с этой структурой, например.

start -> start_date
end -> end_date
activity -> text

все остальные свойства могут иметь свои имена без изменений.

К сожалению, в официальной документации нет примера кода для Yii2. Существуют общие документы для серверных форматов https://docs.dhtmlx.com/scheduler/server_integration.html И учебные пособия для PHP Slim и Laravel, что не совсем то, что вам нужно, но самое близкое, что есть в текущей документации.

person Alex Klimenkov    schedule 14.01.2019