Ответы пользователя по тегу Yii
  • Как в yii 1.1.16 заблокировать таблицу mysql на чтение и запись?

    copist
    @copist
    Empower people to give
    1. Права на запись пользовалем MySQL
    REVOKE *.* ON <database>.<table> FROM <username>@localhost;
    GRANT SELECT, REFERENCE ON <database>.<table> TO <username-readonly>@localhost; -- только SELECT c JOIN

    Из Yii подключаешься к базе пользователем <username-readonly>. Такой способ запретит создавать/изменять/удалять записи таблиц, на которые не были выданы права через GRANT пользователю <username-readonly>
    Не очень гибко. Админ наверное хотел бы писать во все таблицы.

    2. Права текущего пользователя Yii через ACL или RBAC
    www.yiiframework.com/wiki/346/acl-and-rbac
    Не очень надёжно. Можно забыть про проверку в каком-нибудь месте.

    3. Можно поковыряться с CActiveRecord или CMysqlCommandBuilder, чтобы на запросы, содержащие INSERT/UPDATE/DELETE в некоторые таблицы выдавался false или бросалось исключение, если текущий пользователь - не админ.
    Уже лучше, но парсить SQL запросы будет сложно.
    Ответ написан
  • Ошибка при генерация CRUD кода при помощи Gii?

    copist
    @copist
    Empower people to give
    Ну по какой-то причине там файл, имя которого совпадает с именем директории, которую где надо создать с помощью mkdir
    Ответ написан
  • Какие есть средства визуального программирования на Yii?

    copist
    @copist
    Empower people to give
    Для простеньких приложений, для реализации проекта уровня "proof-of-concept" достаточно визуального средства моделирования данных для выбранной СУБД + генератор моделей и CRUD из штатного средства gii фреймворка.

    Эта связка позволить сгенерировать классы Active Record, классы форм, классы контролеров, шаблоны.

    В принципе, этим уже можно пользоваться, если только не ... даты, списки, валидаторы, сложная бизнес логика. Это настраивается и дописывается вручную. Можно подшаманить базовые генераторы Gii как например сделал это я - у меня классы Active Record выглядят так:
    class SomeEntity extends ASomeEntity { /* моя логика */ }
    
    abstract class ASomeEntity extends CActiveRecord { /* стандартная логика Active Record */ }

    Это позволяет перегенерировать класс ASomeEntity при изменении таблиц, но не потерять дополнительную логику, добавленную мной вручную (константы, обработчики событий, специальные выборки с кэшированием).

    Понимаешь, даже в этом случае нужна клавиатура.

    А для реализации более сложного проекта вообще всё не однозначно:
    * переходят к ролевой системе прав (RBAC), которая далеко не всегда связана с CRUD
    * диалоги становятся далеко не типовыми, могут содержать смешанные данные нескольких моделей (профиль пользователя = юзер + его фотки + новости друзей), на отдельные фрагменты накладываются свои ограничения доступа
    * повторяющиеся блоки интерфейса оформляется как виджеты, а страницы начинают подключать эти виджеты динамически, в зависимости от контекста
    * от Active Record постепенно избавляются в пользу ADO + правильное кэширование
    * выносят бизнес-логику из контролеров и моделей в дополнительные классы, появляются расширения и модули
    * часть логики вообще реализуют в браузере

    Такое можно визуально проектировать, но автоматической проекции в виде кода на PHP не получится.

    Хотя... Может быть UML? Но там тоже не всё просто.
    Короче, нет - такое невозможно.

    Рекомендую посмотреть на то, как устроены генераторы в Gii и создать свои, под типовые классы и шаблоны. У меня в практике есть 6 специальных генераторов кода, некоторые из них создавали до 10 файлов в системе. Но клавиатура всё же нужна.
    Ответ написан
    Комментировать
  • Как вывести категории?

    copist
    @copist
    Empower people to give
    1. В контролере выбрать из базы все категории, упорядочить в памяти их иерархию, передать в представление. А в представлении вывести категории + их статьи, пользуясь отношениями, описанными в моделях
    Документация про организацию отношений между моделями в Yii
    (!) Но это подойдёт только для небольшого объёма данных, потому что иначе потребуется память для сортировки категорий + отдельные SQL запросы на поиск статей по каждой категории.

    2. Для большого объёма данных от реализации иерархии через parent-child надо отказаться в пользу nested sets. Реализация nested set для Yii (не проверял её правильность, но 51 форк говорит сам за себя ;) )
    Ответ написан
  • Как с помощью Yii caching реализовать кеширование базы и файлов шаблона в оперативную память?

    copist
    @copist
    Empower people to give
    Посмотри следующие разделы в документации:

    * кэширование страниц - про то, что в кэш можно поместить всё содержимое страницы
    * кэширование фрагментов - про то, что можно поместить в кэш кусочек HTML
    * кэширование динамического содержимого - про то, что внутрь кэшируемого фрагмента можно включить код, который меняется (например, в кэш всей страницы - блок банеров, при каждом обновлении страницы показывать другой банер)

    Обращайся, если нужны подробности (https://toster.ru/user/copist)
    Ответ написан
    Комментировать