Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Самопис для форума [9]
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
этот биндер пишется в 30 строк. смотря что нужно делать в колбеке
у меня например принято за стандарт возвращать json с полем success
если success == true то делать одно, если нет , то вывести ошибки согласно общепринятому стандарту, например выделить красным инпуты (добавить класс) и добавить подстрочно что именно за ошибки в виде текстовых сносок
после саксеса по мере необходимости тоже добавляются всякие плюшки например можно передать в джейсоне проперти message - что значит нужно отобьразить мессадж
если это попап, то нужно очистить поля и закрыть попап
можно просто передать саксес колбек (имя функции которую нужно вызвать при успехе)
можно передать строку js и выполнить эвал
собственно вариантов может быть много и о стандарте нужно договариваться и принимать его исходя из требований
----- Just do it
DeepVarvar
Отправлено: 24 Декабря, 2014 - 13:22:37
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Panoptik пишет:
собственно вариантов может быть много и о стандарте нужно договариваться
Именно с тем кто возьмется писать биндер я и хотел обсудить нюансы. В том смысле, что у меня ж бекенд уже умеет возвращать стандартно оформленные данные в JSON, на наличие полей и их значения должна будет опираться логика биндера и не только биндера, раз уж под одну расческу всех.
type:'member_error',// все варианты: system_error, member_error
title:'Заголовок сообщения',
description:'Описание сообщения',
location:'/url/to/redirect'// этого св-ва может не быть
// при бросании исключения можно добавлять абсолютно любые кастомные данные
// конструктор исключения принимает всего один аргумент - массив
// location был дан как пример кастомного возвращаемого св-ва
// ключ type не может быть переопределен ключем входного массива
// он зависит от класса исключения
// в debug-режиме тут будет полный стектрейс, имя файла,
// номер строки где бросили исключение, и что-то там еще для отладки
}
// любые другие данные добавленные во вьюху во время работы контроллера
// их может не быть если было брошено исключение, т.к. исключение очищает тело ответа
// в любом случае клиент увидит либо данные, либо report
}
То же самое для XML-контекста вывода, ну т.е. будет XML с такой же структурой как у этого JSON.
Только при исключении обернуто будет в корневой элемент <response> всегда.
А при успешной выдаче результата, если задана кастомная XSD-schema то будет рисовать по ней, иначе тот же корневой <response>
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
ну хмл можешь оставить, он никому не нужен в данном случае
второе - это имеется ввиду распространенный кейс ошибок не запроса а именно валидации, то есть если пользователь заполняет форму с 3-5 филдами, то у меня к примеру на каждый невалидный филд приходит свой мессадж в массиве errors примерно в таком формате
"login":["Login must be between 6 and 16 characters","Login may contain only alphanumeric characters"],
}
}
еще конечно желательно обрабатывать ошибки сервера а-ля 403, 404, 500
при этом если получается ошибка 403 то по идее адекватной реакцией должно быть событие отображения формы логина (если кончилась сессия) или отображения ошибки из-за чего что-то не происходит
----- Just do it
DeepVarvar
Отправлено: 24 Декабря, 2014 - 14:30:13
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Panoptik пишет:
заполняет форму с 3-5 филдами
Формируй как сам захочешь. Собирай ошибки в массив, потом передай его по ключу в исключение - клиент получит все переданные данные.
Panoptik пишет:
403, 404, 500
403 аяксом? Ну хз, это же аякс и разбирает какой код ответа ему прислали.
Ой не, погоди, это вообще не должно значить что сессия закончилась.
Ну всмсле может значить, но к примеру аякс ломится в папку где Option -Indexes он получит 403, хотя к сессии это никакого отношения не имеет.
404 - ваще нет смысла, ответ не получен. 500 - та же история.
но в случае непредвиденной ошибки сервера обработать ошибку аякс запроса тоже соответственно
----- Just do it
tuareg
Отправлено: 24 Декабря, 2014 - 14:35:32
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
Просто есть вот это чудо, вроде хвалят (сам не использовал), но код нормальный http://habrahabr[dot]ru/post/180279/
Там фактически получается, что 90% валидации на клиенте
DeepVarvar
Отправлено: 24 Декабря, 2014 - 14:39:54
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Это все хорошо, но на бекенде один хрен валидировать надо ))
Я так вообще валидацию на клиенте редко делаю поэтому - ибо нет смысла, сервер вернет ответ.
Но прикрутить можно будет потом этот плагинчик.
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Ну давайте что-ли подведу итоги (некоторые весчи повторю, ото страниц набалаболили то много):
1) Все добавляемые компоненты комментируются и форматируются по PSR1 (гоняю кодснифера).
2) Предусмотрена возможность горизонтального масштабирования (инстансы приложения).
3) Предусмотрен отдельный поддомен для статики.
4) Предусмотрен отдельный поддомен для аттачей и аплоада.
5) Поддержка CLI-режима для крона (~$ /usr/bin/php /path/do/htdocs/index.php --request /cronjobs/jobN?par1=1&par2=2).
6) Конфиги в JSON с возможностью комментирования.
7) Логгирование любых действий, складывает в файлы, ротирует автоматом, формат - JSON.
8) database/memcache/native(session) Storage.
9) Контексты (представления) вывода меняемые на лету - html, xml, json, txt.
10) Репликации БД, еесно - умеем несколько коннектов одновременно.
11) Выкинул или проигнорил всякие тупняки типа: isPublic()/isStatic() (ошибка разработки), abstract (класс когда все методы статические), private (про пользака) - ибо это все просто одной фразой: Не лазий если не нужно.
12) Класс Request похудел.
13) Запилил фильтры, валидаторы и формы, которые этим делом пользуются. Похоже на ZF2, кроме того можно тупо отписать "Validation Rules Chain" и не парится.
14) Редиректы (и накопление остальных/других заголовков ответа) пока оставлены в реквесте.
15) Подгрузка языковых локалей только по требованию компонента (руками).
16) На клиенте взял jQuery.
17) Запилил кое-какую клиентскую обвязку на сабмит форм.
18) Регистрация пользака в процессе реализации.
Вот прямо сейчас в репозитории кое-какие несрастухи. дамп БД не актуальный, конфиг не актуальный, кое-что в коде разломал. Допилю и сообщу когда можно пощупать будет.
Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008
Помог: 6 раз(а)
Давайте, тогда согласуем требования по софту и я создам тестовый сервер.
Вопрос открытый со структурой базы (или я что-то провтыкал), что бы начать делать конвертер
DeepVarvar
Отправлено: 23 Марта, 2015 - 10:08:54
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
0) PHP 5.3 и выше.
1) Apache 2.2 и выше (+ включенный modrewrite) или (не И!) Nginx (хоть самый бородатый).
2) Мускуль 5.1 и выше.
3) Мемкеш для хранения сессионных данных (в репо не реализовано, сессию сейчас хранит БД).
4) Три хоста, подробности тут.
Только прямо щас ты не развернешь - в репозитории все еще поломано. А в прошедшую пятницу у меня умер биос на материнке и я все выходные колупался с компом, так и не успел поправить репо.
Лайм, погоди-ка.
С какой-то там версии мемкеш вроде умеет лочить, типа а-ля мьютексты-семафоры, все такое.
Не?
Кто в курсе?
не знаю
в редисе вообще лочить не надо
он из коробки атомарен
и он просто гораздо удобнее
+ персистентность есличе
но для сессий это все лишнее
но иметь на будущее хорошо бы
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.