ФорумПрограммированиеPHP для идиотов → CRUD Нужен велосипед с нормальными колесами

CRUD Нужен велосипед с нормальными колесами

  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 25 июля 2011 г. 5:48

    Доброго.
    Опять нужно для админки сотворить редактор хреновин. И опять я запутался как нормально построить логику редактора.

    Заткнулся на том, что метод save вынужден разруливать прошло ли сохранение и выдавать или редактор с введенными перед этим данными или
    #—————————————————————————————————
    if('save' == $action){
    $p = param::getList('id','value');
    # И тут засада. Начинается куча ветвлений что куда и как.
    $templateData['r'] = $p;
    $template = 'monsteritemeditor';
    }
    #—————————————————————————————————
    if('new' == $action){
    # значения по умолчанию для новой записи
    $templateData['r'] = array('id' => 0,
    'value' => 'default value');
    $template = 'monsteritemeditor';
    }
    #—————————————————————————————————
    if('editor' == $action){
    # загружаем в редактор запись и БД
    $tmp = array('id' => (int)param::get('id',-1));
    $tmp = faMonstro::getMonsters($tmp);
    if(empty($tmp)){
    throw new Exception('Запись не найдена.');
    }
    $templateData['r'] = reset($tmp);
    $template = 'monsteritemeditor';
    }
    #—————————————————————————————————
    if('viewitem' == $action){
    # Загружаем запись из БД
    $tmp = array('id' => (int)param::get('id',-1));
    $tmp = faMonstro::getMonsters($tmp);
    $templateData['r'] = reset($tmp);;
    $template = 'monsteritem';
    }


    Давно уже натыкался на удобную разбивку действий, но удачно потерял где это было.
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 25 июля 2011 г. 6:08, спустя 19 минут 24 секунды

    Create // post
    Update // post
    Read // get
    Delete // post или гет - похуй
    Verify // post, возвращает json
    Edit // get, возвращает HTML с формой
    List // get, возвращает список элементов

    рабочий цикл формы, точнее фабрики форм:

    List -> Read
    либо
    List -> Read -> Delete
    либо
    List -> Delete
    либо
    List -> Edit -> Verify (аяксовый или обычный запрос) -> Create/Update
    либо
    List -> Edit -> (отмена)

    CRUD - это основные функции хранилища данных, а не приложения как такового. попытка натянуть CRUD-модель на веб-действительность заканчивается еблей самого себя в мозг, потому что в этой модели как минимум не значится Verify.
    не всё полезно, что в swap полезло
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 25 июля 2011 г. 7:44, спустя 1 час 36 минут 31 секунду

    попытка натянуть CRUD-модель на веб-действительность заканчивается еблей самого себя в мозг, потому что в этой модели как минимум не значится Verify

    +100
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 25 июля 2011 г. 8:11, спустя 26 минут 25 секунд

    Аббревиатуру "CRUD" я написал, дабы было понятно, что я хочу.
    А с мозгами вы всё верно подметили :)
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 25 июля 2011 г. 9:22, спустя 1 час 11 минут 26 секунд

    AndryG, роутером разруливай
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 25 июля 2011 г. 14:33, спустя 5 часов 10 минут 40 секунд

    круд не круд, все сдохнем, попиздите еще
    Сапожник без сапог
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 25 июля 2011 г. 14:41, спустя 8 минут 38 секунд

    сотворить редактор хреновин

    fgets читает: сотворить реактор хреновин
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 26 июля 2011 г. 3:27, спустя 12 часов 45 минут 18 секунд

    Блина, киньте кто-нить кусок своего редактора :)
    Разделять верификацию и сохранение на две отдельные части не комильфо - всё одно при сохранении надо проверять данные и при ошибках выдавать форму редактирования.
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 26 июля 2011 г. 3:33, спустя 6 минут 19 секунд

    Разделять верификацию и сохранение на две отдельные части не комильфо - всё одно при сохранении надо проверять данные и при ошибках выдавать форму редактирования.

    я аяксом проверяю, особенно если в форме файлы
    Спустя 295 сек.
    киньте кто-нить кусок своего редактора

    как тебе объяснить. у меня вся эта поебень привинчена к CMS, и без неё смысла не имеет.
    не всё полезно, что в swap полезло
  • mexys

    Сообщения: 19 Репутация: N Группа: Кто попало

    Spritz 26 июля 2011 г. 3:47, спустя 14 минут 16 секунд

    Стандартный код в Yii

    public function actionCreate()
    {
    $model = new ModelName;

    if (isset($_POST['ModelName'])) {
    $model->attributes = $_POST['ModelName'];
    if ($model->save())
    $this->redirect(array('view', 'id' => $model->id));
    }

    $this->render('create', array(
    'model' => $model,
    ));
    }

    public function actionUpdate($id)
    {
    $model = $this->loadModel($id);

    if (isset($_POST['ModelName'])) {
    $model->attributes = $_POST['ModelName'];
    if ($model->save())
    $this->redirect(array('view', 'id' => $model->id));
    }

    $this->render('update', array(
    'model' => $model,
    ));
    }

    public function actionView($id)
    {
    $this->render('view', array(
    'model' => $this->loadModel($id),
    ));
    }

    // Можно немного изменит и через ajax сделать
    public function actionDelete($id)
    {
    $this->loadModel($id)->delete();
    $this->goBack();
    }
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 26 июля 2011 г. 5:45, спустя 1 час 57 минут 24 секунды

    я аяксом проверяю, особенно если в форме файлы

    все равно на сервере надо проверять…
    Спустя 207 сек.
    mexys, это все хорошо, но бывают разны обработки и разных ошибок, бывают модели без "последних" состояний и т.п.
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 26 июля 2011 г. 8:27, спустя 2 часа 42 минуты 8 секунд

    все равно на сервере надо проверять…

    да и?
    не всё полезно, что в swap полезло
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 26 июля 2011 г. 9:36, спустя 1 час 9 минут 7 секунд

    и…
  • mexys

    Сообщения: 19 Репутация: N Группа: Кто попало

    Spritz 26 июля 2011 г. 10:39, спустя 1 час 2 минуты 50 секунд


    mexys, это все хорошо, но бывают разны обработки и разных ошибок, бывают модели без "последних" состояний и т.п.

    Если что пошло не так, метод loadModel кидает CHttpException, который обрабатывается фреймворком. Поэтому в остальных методах можно за проверки на заморачиваться.
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 26 июля 2011 г. 12:23, спустя 1 час 43 минуты 57 секунд


    и…

    кто остался на трубе?
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!