yii2 с планировщиком dhtmlx и выберите заполненный с сервера - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь заполнить раскрывающийся список выбора проекта данными с сервера. Я использую 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);

Что я должен изменить?

* +1016 * UPDATE: Итак, я сейчас здесь:
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", … }

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

1 Ответ

0 голосов
/ 14 января 2019

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

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

Согласно исходным кодам клиентской стороне требуются свойства 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
   ]
]);

где $ prepareEventsArray - массив объектов событий, как показано в документах, а $ 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 framework и Laravel , что не совсем то, что вам нужно, но самая близкая вещь в текущей документации.

...