Модель CakePHP с “Между датами”

  • " Однако, что является истинным риском или возможностью этого случая ": Зависит от большого количества факторов. Самым большим был бы сайт, который Вы используете, банковское дело было бы выше, чем говорят StackOverflow.
  • " , Где был бы, анализатор пакетов должен работать ": Это могло быть на любом узле, который данные пробегают (включая вредоносное программное обеспечение на Вашей машине). Для наблюдения суммы узлов, простой traceroute покажет Вам.
  • " Мог пакеты быть сниффинговым в любой точке назад к серверу ": Да
  • " это легче "осуществить сниффинг пакетов" в корпоративной сети с большей LAN, в противоположность тому, чтобы быть дома ": Нет, требования являются тем же. Получите контроль узла пакетное перемещение через и добавьте сниффера.
5
задан 25 August 2009 в 17:10
поделиться

2 ответа

If I am following you correctly:

  • The user must specify start/end dates for find queries generated from a form
  • You need to validate these dates so that, for example:
    • end date after start date
    • end date not centuries away from start date
  • You want validation errors appearing inline within the form (even though this isn't a save)

Since you want to validate these dates they will be harder to grab when they are tucked away inside your conditions array. I suggest trying to pass these in separately and then dealing with them later:

$this->Model->find('all', array(
    'conditions' => array(/* normal conditions here */),
    'dateRange' => array(
        'start' => /* start_date value */,
        'end'   => /* end_date value */,
    ),
));

You should hopefully be able to handle everything else in the beforeFind filter:

public function beforeFind() {
    // perform query validation
    if ($queryData['dateRange']['end'] < $queryData['dateRange']['start']) {
        $this->invalidate(
            /* end_date field name */,
            "End date must be after start date"
        );
        return false;
    }
    /* repeat for other validation */
    // add between condition to query
    $queryData['conditions'][] = array(
        'Model.dateField BETWEEN ? AND ?' => array(
            $queryData['dateRange']['start'],
            $queryData['dateRange']['end'],
        ),
    );
    unset($queryData['dateRange']);
    // proceed with find
    return true;
}

I have not tried using Model::invalidate() during a find operation, so this might not even work. The idea is that if the form is created using FormHelper these messages should make it back next to the form fields.

Failing that, you might need to perform this validation in the controller and use Session::setFlash(). if so, you can also get rid of the beforeFind and put the BETWEEN condition array in with your other conditions.

8
ответ дан 14 December 2019 в 01:12
поделиться

Вы можете написать собственный метод в своей модели для поиска между датами:

function findByDateRange($start,$end){
    return $this->find('all',array('date >= '.$start,'data >= .'$end));
}

Что касается проверки, вы можете использовать обратный вызов модели beforeValidate () для проверки две даты. Подробнее об этом здесь .

function beforeValidate(){
    if(Validation::date($this->data['Model']['start_date'])){
        return false;
    }
    if(Validation::date($this->data['Model']['end_date'])){
        return false;
    }
    return parent::beforeValidate();
}

Это ответ на ваш вопрос?

0
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: