<rmcreative>

RSS

Yii совсем без MVC

23 января 2011

Интересный пост «Yii без MVC» нашёлся в блоге Евгения Карагодина. В нём он описывает использование Yii без view и стандартных директорий. Можно пойти дальше и использовать Yii вообще без MVC. Ну или использовать, например, только M. Для этого во входном файле делаем так:

$yii='path/to/framework/yii.php';
$config=dirname(__FILE__).'/config.php';
 
require($yii);
// при желании можно объявить конфиг параметром в виде массива и не использовать файл
Yii::createWebApplication($config);
 
// далее любой код с использованием Yii:
 
$criteria = new CDbCriteria();
$criteria->limit = 10;
$criteria->order = 'id DESC';
$posts = Post::model()->findAll($criteria);
echo "<ol>";
foreach($posts as $post)
{
  echo "<li>";
  echo $post->title;
  echo "</li>";
}
echo "</ol>"

Комментарии RSS

  1. №3780
    Павел
    Павел 23.01.2011, 11:19:43

    А в чем сакральный смысл? MVC как раз и предназначено для того, чтоб в коде не было каши из php, sql и html.

  2. №3781
    karagodin
    karagodin 23.01.2011, 11:37:16

    Смысл в том, что MVC не всегда нужен. А ещё, когда занимаешься обучением программированию на yii гораздо проще начать с маленького примера, от занятия к занятию усложняя его. Более плавное введение дает лучшее усвоение, чем сразу объяснять зачем столько папок и файлов.

  3. №3782
    Павел
    Павел 23.01.2011, 11:50:41

    Да, возможно вы и правы. Но, насколько я понимаю, выводить html в контроллере без вьюхи можно и без манипуляций с индексным файлом файлом.

  4. №3783
    SpiLLeR
    SpiLLeR 23.01.2011, 12:42:18

    По сути одно из: "использование Yii во внешних приложениях".

  5. №3784
     Вовка
    Вовка 23.01.2011, 14:45:51

    А ещё, когда занимаешься обучением программированию на yii гораздо проще начать с маленького примера, от занятия к занятию усложняя его. Показать плохую привычку, что бы от нее потом отучивать?

    По сути одно из: "использование Yii во внешних приложениях". Только когда нет конфликта имен. Я например к битриксу yii так и не прикрутил, пришлось костыли делать.

    По мне, так вредная статья :-)

  6. №3785
    karagodin
    karagodin 23.01.2011, 15:10:34

    Показать плохую привычку, что бы от нее потом отучивать?

    Нет, показать как можно перейти от плохих привычек к хорошим)

  7. №3786
    Ekstazi
    Ekstazi 23.01.2011, 16:07:30

    Уже проскакивало что-то такое на русском форуме в рецептах :) Но все равно интересная инфа.

  8. №3787
    Vladimir
    Vladimir 23.01.2011, 22:34:46

    Мне кажеться тема поднятая в этом посте довольно сильно пересекается с тем, что не давно обсуждалось на форуме сообщества NodeJS. У меня большая просьба ко всем участникам здешней дисскусии прокоментировать здесь, и на самом форуме ваше мнение касательно следующей идеи:

    В кратце говоря я предлагаю достойную альтернативу патерне Model-View-Controller (MVC). Мой вариант к примеру может называться - Data-MiddleWare-View (DMV).

    Местонахождение форумной дисскусии можно найти по следующему линку: Есть ли смысл создавать свой велосипед. Мне лично крайне важно развернуть широкую и желательно эмоциональную дисскусию на данную тему. По ряду причин ставки на новую патерн очень велики. Что я подразумеваю под этими словами вам будет очевидно буквально завтра, если вы будете следить и еще лучше учавствовать в упомянутой форумной дисскусией.

  9. №3788
    Sam
    Sam 24.01.2011, 2:04:58

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

    В теме на форуме сложно понять, о чём речь. Связь с этим постом очень туманна. Как будет готово нормальное описание, готов почитать-покритиковать. Пишите в почту.

  10. №3789
    Dmitry Scriptin
    Dmitry Scriptin 24.01.2011, 4:13:00

    А ещё, когда занимаешься обучением программированию на yii гораздо проще начать с маленького примера

    По мне, так лучше начинать обучению Yii только тогда, когда человек уже знает, что такое MVC. Тогда ни учить этому с нуля, ни переучивать после не придется.

    Суть подобных фреймворков как раз и состоит в том, что в них уже есть реализация MVC, поэтому нужно начинать именно с демонстрации того, как использовать данный шаблон именно в этом конкретном фреймворке. Иначе получится не обучение фреймворку, а просто демонстрация того, что он как бы в принципе работает и что в нем есть какие-то функции.

  11. №3790
    Vladimir
    Vladimir 24.01.2011, 5:47:07

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

    Универсальную Data Management System, вам не реализовать, используя MVC. Думаю, что реализация подобной системы возможна при наличии, двух условий. Первое условие это использование баз данных класса "NO SQL". К примеру Mongo вписывается здесь неплохо. Второе условие это отказ от применения специфичных под каждую структуру данных моделей и контроллеров. Ко всему сказанному я считаю, что имеет место быть явный перебор в использовании MVC патерн. Было бы очень интересно знать, если хотя бы кто-то из ваших читателей тоже ставит под сомнение универсальность MVC патерн.

    В теме на форуме сложно понять, о чём речь. Связь с этим постом очень туманна. Как будет готово нормальное описание, готов почитать-покритиковать. Пишите в почту.

    Большое спасибо за готовность принять участие в обсуждении. И я несомненно воспользуюсь возможностью контактировать с вами через почту. Я кое-что дописываю, на эту тему, так что надеюсь, что погода скоро поменяется :)

  12. №3791
    Никита
    Никита 24.01.2011, 13:22:09

    С консольки удобно запускать скрипты.

  13. №3793
    Loki
    Loki 25.01.2011, 21:03:27

    А как по мне так удобно для AJAX приложений. Там VC не особо нужны ибо каждый запрос от силы 1-2 запроса в БД и возврат результата в формате JSON =)

  14. №4339
    Optimus
    Optimus 10.04.2011, 18:19:32

    Если возникает проблема с GZip, то как вариант поможет решение:

    // change the following paths if necessary
        $yii=dirname(__FILE__).'/../yii/yii.php';
        $config=dirname(__FILE__).'/../transport/protected/config/remote.php';
     
        defined('YII_ENABLE_ERROR_HANDLER') or define('YII_ENABLE_ERROR_HANDLER', false);
        defined('YII_ENABLE_EXCEPTION_HANDLER') or define('YII_ENABLE_EXCEPTION_HANDLER', false);
     
        require_once($yii);
        Yii::createWebApplication($config);
        Yii::app()->assetManager->setBasePath(dirname(__FILE__).'/../transport/assets/');
     
        ob_start('ob_gzhandler');
     
        $controller = new CController('orders');
        $controller->widget('zii.widgets.CListView', array(
            'dataProvider' => new CActiveDataProvider('Order', array(
                'criteria' => array(
                    'with' => 'passengers'
                )
            )),
            'itemView' => 'detail_table'
        ));
        $content = ob_get_contents();
        ob_end_clean();
        return $content;
  15. №8166
    Zend
    Zend 18.07.2013, 21:52:29

    Так вот оказывается как надо было делать то? :) Я то все голову ломал.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.