Присвойте пустой массив $ this-> paginate () в cakephp условно - PullRequest
0 голосов
/ 16 ноября 2011

Я новичок в CakePHP с небольшим опытом программирования.Я пытаюсь условно назначить пустой массив функции '$ this-> paginate ()', но он не работает.Ниже мой частичный код в LogsController:

if ($privacyVisible['Title']['privacy'] == 1) {
            $this->Log->recursive = 0;
            $this->paginate = array(
                'limit' => 10,
                'order' => array(
                'Log.id' => 'desc'
                ), 'conditions' => array('Title.slug' => $id));

                $this->set('logs',$this->paginate());
        } else {
            $this->Log->recursive = 0;
            $this->paginate = array(
                'limit' => 10,
                'order' => array(
                'Log.id' => 'desc'
                ), 'conditions' => array('1' => '2'));

                $this->set('logs',$this->paginate()); //here it should be empty
        }

Но, на мой взгляд, после выполнения отладки ($ logs);при применении условия else, то есть privacy = 0, я получаю все значения, возвращенные как показано ниже:

app \ View \ Logs \ index.ctp (строка 10)

Array
(
[0] => Array
    (
        [Log] => Array
            (
                [id] => 114
                [title_id] => 16
                [body] => hi!
                [time] => 2011-11-15 21:19:10
            )

        [Title] => Array
            (
                [id] => 
                [user_id] => 
                [logname] => 
                [slug] => 
                [privacy] => 
            )

    )

[1] => Array
    (
        [Log] => Array
            (
                [id] => 113
                [title_id] => 14
                [body] => hey!
                [time] => 2011-11-15 20:52:52
            )

        [Title] => Array
            (
                [id] => 14
                [user_id] => 7
                [logname] => college
                [slug] => college
                [privacy] => 1
            )

    )

[2] => Array
    (
        [Log] => Array
            (
                [id] => 112
                [title_id] => 12
                [body] => hey hi.
                [time] => 2011-11-15 20:51:19
            )

        [Title] => Array
            (
                [id] => 
                [user_id] => 
                [logname] => 
                [slug] => 
                [privacy] => 
            )

    )

[3] => Array
    (
        [Log] => Array
            (
                [id] => 111
                [title_id] => 12
                [body] => that will be great.
                [time] => 2011-11-15 20:51:13
            )

        [Title] => Array
            (
                [id] => 
                [user_id] => 
                [logname] => 
                [slug] => 
                [privacy] => 
            )

    )

)

Еслибыл пустой массив, я был готов проверить его на if (empty ($ logs)) и показать, что «Вы не разрешены».Но пока кажется сложным.Любое предположение, что здесь не так?

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Я не до конца понимаю, чего вы пытаетесь достичь здесь, и у меня есть ощущение, что это можно сделать другим, более изящным способом. Вы рассматривали возможность использования поведения Containable ? Содержимое часто используется для фильтрации нежелательных результатов, включая связанный контент.

Чтобы попытаться ответить на ваш вопрос, почему бы не передать пустой массив при использовании $this->set();?

Вызов $this->paginate() выполняет необходимые операции поиска для отображения данных. Вы можете передать пустой массив в качестве переменной logs во второй части вашего оператора if / else, например:

$this->set('logs',array());

PaginationHelper может сломаться на пустых массивах, но я не уверен в этом, поэтому вы можете проверить наличие пустых значений в соответствующем представлении.

1 голос
/ 16 ноября 2011

$ this-> набор ( 'журналы', $ this-> постраничной ())

Должно быть:

$ this-> набор ( 'журналы', $ this-> постраничной ( 'Log'));

Кроме того, вы можете переписать его как:

$logs = array();

if ($privacyVisible['Title']['privacy'] == 1) {

  $this->paginate = array(...);
  $logs = $this->paginate('Log');

}

$this->set(compact('logs'));

Таким образом, вы выполняете запрос к базе данных только тогда, когда действительно хотите получить обратно свои данные.

...