Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Логичные места для ООП/OOP #25

Open
yunasc opened this issue May 10, 2014 · 12 comments
Open

Логичные места для ООП/OOP #25

yunasc opened this issue May 10, 2014 · 12 comments

Comments

@yunasc
Copy link
Owner

yunasc commented May 10, 2014

ИМХО самое первое место которое стоит переделать на классы это captcha.

$captcha = new Captcha;
$captcha->generate(); // а можно и без этого
echo $captcha->getHtmlForm(); // бежим в View или просто шаблонизатор и получает шаблон для вывода, куда вставляем нужные переменные

if (!$captcha->validate())
    stderr('Error', 'Captcha fail');

Осталось подумать как-же передавать нужный hash от строки, можно как hidden поле в форме.

Дальше идет вывод формы комментариев и сами комментарии:

$comments = new Comments($torrentid, array('type' => 'torrent')); // передать можно ведь и другой вариант, т.е искать будет по другой колонке просто.
$comments->fetch(array('page' => 3, 'pp' => 25)); // или любой другой вариант
echo $comments->getHtml(); // тут уже запрос побежал во вьюуху, забрал шаблон и вывел кусок html.

P.S: Я совсем не желаю использовать такие конструкторы:

$query = SphinxQL::create($ql)->select('id')
    ->from('torrents')
    ->option('ranker', $matcher[$search_type])
    ->limit(1000);
$query->match('descr', SphinxQL::expr(custom_escape_fn($query, $descrsearchstr, $search_type)));

$results = $query->execute();

Буду рад выслушать критику.

@yunasc
Copy link
Owner Author

yunasc commented May 22, 2014

Как лучше выложить сделанный класс для Captcha?

Думаю про отдельный репозиторий.
Вопрос 2: можно-ли вести 2-й репозиторий, как под-папка первого, и что-б коммиты из под суб-репы попадали в общий?

@neonko
Copy link

neonko commented May 26, 2014

можно просто сделать отдельную ветку (Branch)

@yunasc
Copy link
Owner Author

yunasc commented May 26, 2014

Тоже вариант, но неудобство в том что разные ветки - и потом черри между ними - брр.

@yunasc
Copy link
Owner Author

yunasc commented May 26, 2014

А так код вышел такой:

<?php

require('core/core.php');

include 'classes/CaptchaImage.php';

$imagestring = $_SESSION['imagestring_' . $_GET['imagehash']];

if (empty($imagestring))
    $imagestring = 'WTF?';

$image = new CaptchaImage($imagestring);

$image->output_image();

?>
<?php

require('core/core.php');

define('COOKIE_SALT', 'some salt to protect cookies and do other stuff');

include 'classes/Captcha.php';
include 'classes/CommentsCaptcha.php';

$cap = new GenericCaptcha();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $is_valid_cap = $cap->validateCaptcha();
}

echo <<<VIEW
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head><title>Captcha Test</title>
    <link rel="stylesheet" href="styles/style.css" type="text/css">
    </head>
<body>
<form action="index.php" method="post">
VIEW;

echo $cap->getHtmlForm();

$validation_result = include 'templates/validation.php';

echo <<<VIEW
<br /><input type="submit" value="Проверить" />
</form>
Результат проверки кода: $validation_result
</body>
</html>
VIEW;

?>

https://github.com/yunasc/captcha

@neonko
Copy link

neonko commented May 26, 2014

что насчет реализации неких "Entity" типа User или Torrent ?

@yunasc
Copy link
Owner Author

yunasc commented May 27, 2014

Думал о таком, но с капчей легче всего.

Потом есть смысл колупать Torrent и только после User.
Почему User в последнюю очередь? Да потому-что много где get_user_class() надо будет заменять...

@Apmyp
Copy link

Apmyp commented Sep 17, 2014

Давайте попробуем накрутить что-то для Comments, например. Что внутри Comments::fetch будет? sql_query? Или обертку напишем для конструктора запросов и от него наследовать будем?

@yunasc
Copy link
Owner Author

yunasc commented Sep 21, 2014

Я думаю чуть-чуть по другому:

::fetch нельзя, только ->fetch ;) У нас-же не статический метод.

Что там внутри - я думаю, что неплохо хотя-бы использование sql_query, а сам запрос (его шаблон) брать из свойств класса.
Как его вызывать - хороший вопрос.
Prepared statements? У нас не mysqli.
PDO? не уверен, но вроде большой геморрой по части текстов
Значит, остается вариант использовать свой/хорошо известный DBAL.

Тут надо смотреть. Я, с одной стороны, хочу сделать нормально, с другой, не хочу слишком привязыватьтся к каким-то вещам намертво - переделывать будет мучительно. А с первого раза сделать правильный выбор - та еще задачка :)

@Apmyp
Copy link

Apmyp commented Sep 21, 2014

Имел ввиду не статический метод, конечно.
Использовать PDO, обертку для него (свою или посмотреть) и уже от неё Comments.

@yunasc
Copy link
Owner Author

yunasc commented Sep 21, 2014

А зачем использовать PDO?
В всем движке, сейчас, используется mysql_.

Лучше воткнуть DBAL, который, пока, будет использовать mysql_.
Далее переводить на него модули, какие-то через конструктор запросов (не люблю я их), и потом уже разом сменить на mysqli_.

@Apmyp
Copy link

Apmyp commented Sep 21, 2014

Например потому что mysql_ больше не поддерживается, не рекомендуется и вообще нет нет нет?

@yunasc
Copy link
Owner Author

yunasc commented Sep 21, 2014

Ты не прав: устарело расширение mysql, но не mysqlnd.
Тем более, что никто, пока, не заявлял совместимость с PHP 5.6 где, по моей памяти, удалили расширение mysql, но оставили mysqli и mysqlnd.

Функции mysql_ никогда не устаревали.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants