Сохраните несколько данных hasMany с помощью saveAll () в CakePHP без записи идентификаторов в представлении - PullRequest
1 голос
/ 07 мая 2011

Я, наконец, получил свои данные hasMany для сохранения с помощью saveAll () - (Событие, которое имеет много расписаний).

Я получил его для работы, повторив через данные $ this-> data ['Schedule']на events / admin_edit.ctp и построение всех полей для любых / всех расписаний, которые связаны с этим событием.

Это кажется хорошим (я думаю), но мой вопрос / проблема заключается в том, - мне пришлосьдобавьте поля Schedule.id и Schedule.event_id как скрытые поля, чтобы знать, какие данные сохранить.Это кажется ужасно ненадежным / неправильным ... 1) это правильный способ сделать это?и 2) Не мог ли кто-нибудь просто отредактировать поле для другого идентификатора и нажать «Сохранить», чтобы обновить информацию о другом событии?

Мое следующее предположение, что мне придется встроить какие-то проверки в контроллерперед выполнением saveAll () ... но чем больше я пишу, тем сложнее это становится, и тем менее похожим на Cake.

Любые мысли / предложения о том, как лучше делать то, что я делаю »я делаю, или понимание того, что проверять перед выполнением saveAll (), очень ценится.

1 Ответ

1 голос
/ 07 мая 2011

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

В вашем действии перед вызовом save () введите текущий идентификатор пользователяв каждую запись.то есть:

$this->data['Schedule'][0]['user_id'] = $this->Auth->user('id');

Это может работать не совсем точно, но должно помочь вам.В вашей модели расписания добавьте правило проверки:

var $validate = array(
    'user_id' => array(
        'rule' => 'checkAuth'
        'message' => 'Nice try buddy.',
        'on' => 'update'
    )
);

function checkAuth() {
    $authorized = true;
    if(!$this->hasAny(array(
            'Schedule.id'=>$this->data['Schedule']['id'], 
            'Schedule.user_id' => $this->data['Schedule']['user_id']))) {
        $authorized = false;         
    }
    return $authorized;
}
...