Работа со своими функциями в компоненте Office
Добрый день, у меня к Вам вопрос такой, как можно решить проблему расширения класса auth.class.php компонента Office? Изучая стандартный набор чанков, сниппетов и класса, заметил такую особенность, что в форме чанка передается параметр, например, такой:
<input type="hidden" name="action" value="auth/formLogin" />
Потом в классе auth.class.php который лежит в ядре ModX по пути: /core/components/office/controllers/auth.class.php можно увидеть функцию с таким же именем: public function formLogin($data = array()) {...}
По аналогии я добавил свои две функции (SaveNewPassword и formRepair)в этот класс, а потом вызывал их в формах следующим образом: <input type="hidden" name="action" value="auth/SaveNewPassword" />
и <input type="hidden" name="action" value="auth/formRepair" />
соответственно в каждом своем чанке.Вызываю это все дело в чанке вполне стандартно, таким образом:
[[!officeAuth? &groups=`Users` &tplLogin=`tpl.Office.auth.repair` &HybridAuth=`0`]]
Но все это дело не работает когда я отправляю форму со своего чанка, где в инпуте пишется что-то вроде этого:
<input type="hidden" name="action" value="auth/SaveNewPassword" />
то при отправки субмита это формы выскакивает сообщение «Не могу найти указанное действие». Как решить эту проблему? Подскажите? Может в классе auth.class.php есть какое-то неявное присвоение вызываемой функции по этим параметрам. Кто знает? Комментарии: 6
Все запросы отправляются через ajax, на вот этот коннектор.
Там загружается Office и вызывается его метод loadAction. Он разделяет запрос на 2 строки: класса и метод.
Если запрошенный метод есть в указанном классе — он будет вызван. Если нет, ты получишь ошибку:
Судя по твоему сообщению, ты этого момента даже не доходишь, потому что получаешь «не могу найти указанное действие» от action.php, а он такое выводит, если получает false от loadAction.
Когда loadAction возвращает false? Когда action пустой. А это значит, что твоя форма даже не передала нужный action — вот и ошибка.
Разбирайся с тем, что же ты отправляешь на коннектор. Ну и читай исходники, конечно.
Там загружается Office и вызывается его метод loadAction. Он разделяет запрос на 2 строки: класса и метод.
Если запрошенный метод есть в указанном классе — он будет вызван. Если нет, ты получишь ошибку:
if (isset($this->controllers[$name])) {
/* @var officeDefaultController $controller */
$controller = $this->controllers[$name];
$controller->setDefault($scriptProperties);
if (empty($action)) {$action = $controller->getDefaultAction();}
if (method_exists($controller, $action)) {
return $controller->$action($scriptProperties);
}
}
else {
return 'Could not load controller "'.$name.'"';
}
Судя по твоему сообщению, ты этого момента даже не доходишь, потому что получаешь «не могу найти указанное действие» от action.php, а он такое выводит, если получает false от loadAction.
Когда loadAction возвращает false? Когда action пустой. А это значит, что твоя форма даже не передала нужный action — вот и ошибка.
Разбирайся с тем, что же ты отправляешь на коннектор. Ну и читай исходники, конечно.
Где идет формирование допустимых корректных action? Что такая конструкция auth/formLogin пропускает успешно через метод loadAction, а такая нет: auth/formRepair. Потому что когда в чанке меняю value с auth/formRepair на auth/formLogin, то форма отправляется успешно. Остальное все без изменений.
Я наверное, не по-русски пишу, потому что меня всё реже стали понимать.
Добавь, пожалуйста, метод formRepair в класс Auth, который что-то вернёт. Желательно, как минимум:
Нет никаких допустимых корректных action, есть только доступные методы в классе.
Добавь, пожалуйста, метод formRepair в класс Auth, который что-то вернёт. Желательно, как минимум:
public function formRepair() {
return $this->success('Ура! Работает!');
}
Если такого метода нет, или он ничего не возвращает, или возвращает false — будет такая ошибка, как у тебя.Нет никаких допустимых корректных action, есть только доступные методы в классе.
Грубо как-то отвечаете, я еще учусь же просто, с modx месяц только, а с компонентом office и того меньше. Вы имеете ввиду, наверное, класс officeAuthController что хранится в файле auth.class, потому что такого класса Auth я не нашел (где он находится)? Если в класс officeAuthController, то я так и сделал добавил публичную функцию которая возвращает значение. Ладно спасибо за информацию, буду разбираться.
Ну раз не нравится, как отвечаю — больше не буду.
Извини, пожалуйста.
Извини, пожалуйста.
Все нормально. Просто дружелюбным надо быть к новичкам в работе, не давить их своим опытом. У меня на другом форуме большой рейтинг по прикладному программированию и классическому php-программированию, новичков я не упрекаю в незнании, а отвечаю если знаю конструктивно и просто.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.