Pull to refresh
3
0
Send message
Новички юзают уродливые способы не из какого-то там принципа; а просто потому, что способы, которые решают задачу более правильно, имеют более сложное API, чем уродливые; вот и всё.

и чем это отличается от моего высказывания — «известные решения кажутся слишком сложными из-за непонимания базовых принципов»?
бред же, известные решения кажутся слишком сложными из-за того, что они слишком сложны;

Не решения сложны, а порог входа в php не очень высокий. Можно сделать как в старые темные времена прям в странице sql-запрос и вывод в браузер и это будет работать. Просто же. А вот чтоб понимать чем такие действия грозят и как трудно это потом поддерживать будет — нужно чуток знать как в целом все работает. Потому поначалу и кажется, что шаблонизаторы, контейнеры зависимостей, orm и т.п. — лишние звенья. Зачем они нужны, если в конце все равно пользователь получил страницу?
И при определенных допущениях, по всем показателям лучше эквивалентного на симфони. Он прозрачен как на ладони, он быст и еще много чего. Там много кошерных классных решений.

а что если я вас скажу, что можно написать без строки стороннего кода и так, что у тех, кто будет читать ваш код, не будут литься кровавые слезы и не появится желания высверлить себе мозг перфоратором? Только для этого нужно немного попрактиковаться и почитать парочку книжек, тыкнуть какие-либо сторонние решения чтоб понять, зачем они так сделали.
Какие у вас там кошерные вещи зарыты в ядре? Пока что все ваши суждения похожи на «всю жизнь ел палочками, даже суп, ложки не нужны, не используйте ложки»
Сомнительная необходимость NAMESPACE

Мое кошерное решение: композер на входе должен иметь PHP парсер кода и БД уникальных имен классов и интерфейсов, дирректорий внутри папки vendor.
— зачем?
Сейчас в современном php принята структура наименований классов — имя вендора/имя пакета/пространство имен пакета/название класса
Пример: Aura\SqlQuery\Mysql\Delete
Ваша идея — бессмысленна. Почитайте про psr-4 — что тут непрозрачного? Всегда понятно что и где находится.
Фреймворк должен иметь приложение DEV, как есть в DEV.SKY. Есть зачаток такого приложения в Yii с генерацией файлов CRUD

для симфони вы можете сделать так:

А для phalcon так — https://blog.phalconphp.com/post/dont-like-command-line-and-consoles-no-problem
Посмотрите что произошло с введением NAMESPACE: в институтах ввели новую лабораторную работу по NAMESPACE

беда то какая, придется потратить полчаса чтоб прочитать документацию и применить на практике
Код PHP стал менее прозрачный и медленее работать.

Сравните скорость работы php5.2 и php5.6, а лучше 7.0
Надеюсь мое кошерное решение с NAMESPACE более значимо и прозрачно чем то что я пишу в глобальную область? Уберите огонь из души и настройтесь на чистый разум, может быть вы поймете, что мое решение хорошее?

Нет, не хорошее.
Это пример как витающие тренды вредят

Что к примеру из таких трендов вредит? Возможность подключить в свой проект компоненты фреймвокров, библиотеки и все это ценой правки одного файла? Появление стандартов, которые облегчают понимание стороннего кода? Или то, что полностью весь код содержит phpdoc-секции, из которых понятно что и куда передавать и что получим на выходе?
Я считаю, что должно быть так: один автор сделал класс и положил на композер. Другому класс понадобился он его скачал, но увидел что он плох. Модифицировал его, использовал в своем проекте, свое гениальное дополнение прокомментировал и положил на композер новую версию, добавился там автором.

Ну а как сейчас происходит — вот собрал я для своего мелкого домашнего проектика некоторые библиотеки, и все хорошо, но не хватает мне какой-то фишки. Я делаю pull-request, его принимают и все пользуются новой фишкой быстро и безболезненно. Если же не принимают — юзаю свой форк с модификациями и радуюсь жизни, так же переподключая в следующие проекты.
Конечно, при условии что я как-то владею инструментом которым пользуюсь и понимаю что делаю. Если же у меня очень ограниченный запас знаний и практики — я запилю свое решение, в котором проигнорирую все лучшие практики и которым смогу пользоваться только я. А все потому, что без базовых знаний не применить все трендовые вещи, которые при понимании оказываются довольно простыми.
Обожаю подобные посты про самописные cms и фреймворки. Особенно когда автор положил огромный болт на какие-либо правила и общеизвестные приемы и всерьез считает что именно его решение кошерно, а все остальные могут лососнуть тунца.
А причина простая — вместо того, чтоб изучить инструмент, с которым работаешь (в данном случае php), люди бросаются писать решение под себя, потому что порог вхождения невысок и позволяет получить результат быстро, пусть и кривыми способами, а известные решения кажутся слишком сложными из-за непонимания базовых принципов. Ну а после — так и используют свое решение, не пытаясь даже смотреть в сторону других, с большим сообществом, оттестированных и проверенных временем.
Если автор не тролль, что маловероятно, то пусть почитает:
http://getjump.me/ru-php-the-right-way/
https://getcomposer.org/
http://www.php-fig.org/psr/
Как работает http — делаем запрос -> получаем ответ
php заточен под web
как работает php — получили запрос -> отдали ответ -> умерли
стоит вспомнить про php-fpm, который не все время умирает
и такие вещи как https://github.com/reactphp, https://github.com/amphp — если нужно не умирать
http://govnokod.ru/19878 — код пациента в самом подходящем месте
Приятно осознавать, что не только я считаю, что фреймворки зло.

зло — не фреймворки, а кривые руки. доводилось патчить код одного противника фреймворков, и в нем была куча переменных вида $u, $uid, $tid, $o и т.п… Что не дай человеку — чистый php, symfony, phalcon — все превратится в нечитаемый поток ужаса. И всегда есть вариант собрать по отдельности из библиотек, почитав код перед этим.
хотя части и можно разнести по пакетах, есть сомнения, что в этом есть практический смысл.

Чтоб быстро и безболезненно установить нужную часть и использовать если она норм
Не вижу никаких проблем кроме того, что именованные подготовленные выражения не поддерживаются.

Вместо
$write_connection->q(
    [
        "DELETE FROM FROM `[prefix]articles` WHERE `id` = ?",
        "DELETE FROM FROM `[prefix]articles_comments` WHERE `article` = ? OR `date` < ?",
        "DELETE FROM FROM `[prefix]articles_tags` WHERE `article` = ?"
    ],
    [
        $article_to_delete,
        time() - 24 * 3600
    ]
);

было бы
$write_connection->q(
    [
        "DELETE FROM FROM `[prefix]articles` WHERE `id` = :article_id",
        "DELETE FROM FROM `[prefix]articles_comments` WHERE `article` = :article_id OR `date` < :clear_time",
        "DELETE FROM FROM `[prefix]articles_tags` WHERE `article` = :article_id"
    ],
    [
        "article_id"=>$article_to_delete,
        "clear_time"=>time() - 24 * 3600 //коряво, но так все равно лучше и понятнее
    ]
);

The query objects do not execute queries against a database. When you are done building the query, you will need to pass it to a database connection of your choice.

Это к тому, что тут только собираются запросы, для их исполнения можно использовать https://github.com/auraphp/Aura.Sql/

Вы привели пример получения результата запроса через PDO, можно сделать это же через Aura.Sql:
$pdo = new ExtendedPdo(...);
$result = $pdo->fetchAll($select->getStatement(), $select->getBindValues());
//или же
foreach ($pdo->yieldAll($select->getStatement(), $select->getBindValues()) as $row) {
    // ...
}
//и т.п.

Здесь в зависимость модуля одна строчка в meta.json (пример), и ещё одна если ещё нет зависимости от Composer (пример).

Как мне выдернуть Ваше творение в свой проект не на CleverStyle Framework?
В каждой публикации про самопальные Query builder'ы скидываю эту ссылку. Компонент от ауры я могу одной строкой подключить в свой проект, Ваш — не знаю как долго и имеет ли смысл выдирать его
Взять хотя бы insert
<?php
$insert = $query_factory->newInsert();

$insert->into('foo')             // insert into this table
    ->cols(array(                // insert these columns and bind these values
        'foo' => 'foo_value',
        'bar' => 'bar_value',
        'baz' => 'baz_value',
    ));
?>



и Ваш вариант
$write_connection->q(
    'INSERT INTO `table_name`
        (`id`, `value`)
    VALUES
        (?, ?),
        (?, ?),
        (?, ?)',
    [
        1, 12,
        2, 13,
        3, 14
    ]
);
/usr/bin/php /path/to/bin/cli clean_cache:System/optimization

в CleverStyle Framework я не смотря в код знаю, что за запрос отвечает статический метод cs\modules\System\cli\Controller::optimization_clean_cache()

Наверно потому что вы автор. Лично для меня связь не настолько явная.

Можете уточнить для чего конкретно такое может быть нужно, что нельзя вручную сформировать ссылку?

допустим, генерация ссылки на комментарий или на какую-либо страницу/раздел/статью/путь к api и т.п
Или же генерация ссылки для карты сайта
Генерация ссылки в шаблоне для почтовой рассылки. Много сценариев можно придумать, и переименование модуля не приведет к тому, что придется вручную переписывать уже захардкоженные ссылки во всех местах с их упоминанием.
Где clean_cache выступает в роли аналога HTTP метода, а System/optimization в роли аналога пути страницы.

Почему бы не сделать консольные команды по человечески, например:
/usr/bin/php /path/to/bin/console cache:clear //symfony
php app/cli.php main test world universe //phalcon
php artisan make:console SendEmails //laravel

В чем смысл именно такой реализации?
Мне кажется сомнительным решением писать роуты к cli-модулям, а не оформлять их как консольную команду
И как такое чудо вешать на крон?
Ни в одном популярном фреймворке такого вопроса и не возникнет.
И не описан способ получения ссылки по интересующему роуту с передачей параметра, как это делается почти везде. Как в вашей системе получить ссылку на комментарий к созданному мной элементу каталога?
ок, спасибо
Хотелось бы увидеть сравнение производительности с Phalcon на php7
мне хотелось бы, чтобы скачав себе чужой проект, найти все файлы ровно там, где я ожидал бы их увидеть

в php-проектах так будет с simfony — все будет на своих местах + интерфейсы на каждый чих, что позволит быстро и безболезненно реализовывать кастомный функционал
>«крутые» и разнообразные ООП фреймворки на PHP жутко тормозят

Согласен. Я это постоянно говорю. Но илита загоняет меня в минуса и ридонли :)

http://govnokod.ru/19878
Ваше мнение и гроша ломанного не стоит, т.к. вы некомпетентны совсем, или же уже 3 аккаунт тупого тролля (не жирного, именно тупого, который показывает недостаток наличия аккаунтов без инвайта с возможностью что-то комментировать)
> одна система пакетов
эрлангу это не мешает

https://hex.pm/
http://synrc.com/apps/mad/
я планирую написать статью, где попытаюсь сравнить свою библиотеку с другими решениями

жду сравнения с этим — https://github.com/auraphp/Aura.Filter

Information

Rating
Does not participate
Registered
Activity