Метод CakePHP Redirect не работает? - PullRequest
0 голосов
/ 13 февраля 2012

Мы начали следовать учебному пособию по блогу CakePHP, размещенному на веб-сайте cakephp.org - http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html

На данный момент мы застряли на перенаправлении после отправки формы (т. Е. Функция edit / add).Вот как выглядит наш код:

public function edit($id = null) {
    $this->Post->id = $id;

    if ($this->request->is('get')) {
        $this->request->data = $this->Post->read();
    } else {
        if ($this->Post->save($this->request->data)) {
            $this->Session->setFlash('Your post has been updated.');
            $this->redirect($this->referer());
        } else {
            $this->Session->setFlash('Unable to update your post.');
        }
    }
}

После комментирования строки $this->redirect($this->referer()); страница ссылается на свою собственную ... с добавленной строкой она останется на пустой белой странице.

Пример: http://www.drukwerkprijsvergelijk.nl/posts/

Пожалуйста, помогите этим маленьким котятам, мы в отчаянии.

Ответы [ 4 ]

4 голосов
/ 13 февраля 2012

Вы не можете использовать referer () при редактировании. Это потому, что после первого POST реферер находится на той же странице, на которой вы сейчас находитесь. referer () можно использовать только для перенаправлений, если на этой странице не было публикации формы (например, удалить или изменить / добавить сразу после доступа к странице). но даже с delete () вы должны быть осторожны. переход из "view" приведет к тому, что перенаправление попадет в цикл перенаправления ...

Вы можете сохранить реферер в форме как скрытое поле и использовать его для перенаправления назад.

2 голосов
/ 13 февраля 2012

Есть ли у вас какие-либо пробелы вне кода PHP в вашем PostController или в вашем AppController?Я только что посмотрел на исходный код вашей страницы редактирования, и он, кажется, содержит пробел.Это может помешать установке заголовков, и, таким образом, предотвратить перенаправление на работу.

2 голосов
/ 13 февраля 2012

По причинам, указанным выше, вы не можете использовать referer () при редактировании и добавлении.

Используйте что-то вроде

$this->redirect(array('action' => 'view', $id));

или

$this->redirect(array('action' => 'index'));

вместо.

Вы также можете попробовать указать контроллер в массиве url:

$this->redirect(array('controller' => 'posts', 'action' => 'index'));
1 голос
/ 19 ноября 2015

Используйте это перед функцией фильтра

    header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); // // HTTP/1.1
    header("Pragma: no-cache");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...