返回$ this->重定向不重定向到目标

时间:2017-10-01 01:35:10

标签: cakephp cakephp-3.x

我有以下功能subscribe

public function subscribe() {
    $plans = Configure::read('Stripe.american_plans');
    $plans['premium_american_monthly'] = __('Premium Monthly') . ' - 4.99';
    $plans['premium_american_annually'] = __('Premium Annually') . ' - 49.99';

    if ($this->request->is('post')) {
        $user = $this->Users->get($this->Auth->user('id'));

        if ($this->Users->save($user)) {
            $this->Flash->success(__('Your account has been subscribed'));
            debug($this->redirect(['controller' => 'Users', 'action' => 'edit']));
            die();
        } else {
            $this->Flash->error('User could not be subscribed.');
        }
    }

    $this->set(compact('plans'));
}

我在操作$ users对象之前将其保存在实际函数中,但这是最简单的我可以创建该函数并使页面仍然加载并且错误仍然发生。

重定向周围的调试语句是检查它重定向用户的位置,然后吐出:

object(Cake\Http\Response) {

'status' => (int) 302,
'contentType' => 'text/html',
'headers' => [
    'Content-Type' => [
        (int) 0 => 'text/html; charset=UTF-8'
    ],
    'Location' => [
        (int) 0 => 'https://localhost/users/subscribe'
    ]
],
'file' => null,
'fileRange' => [],
'cookies' => [
    'cookies go here'
    ]
],
'cacheDirectives' => [],
'body' => ''

}

正如您所看到的,它没有重定向到我期望的位置。实际上,无论我在重定向语句中添加什么内容,它总是会重定向到同一个函数subscribe

我不知道我做错了什么,因为这段代码与我正常运行的其他函数看起来相同。有谁知道如何将此重定向到我希望它重定向的位置?

1 个答案:

答案 0 :(得分:0)

感谢@ndm的评论,让我找到了解决方案。这感觉就像一个肮脏的解决方案,因为我不认为我正在解决实际问题,但它确实有效。在我重定向之前,我添加了以下内容:

$url = Router::url(['controller' => Users', 'action' => 'edit']);
$this->response = $this->response->withLocation($url);

问题正在发生,因为某处我的标题已经设置了错误的位置。我不确定这是怎么回事,因为我们的其他重定向逻辑都没有被击中,我们也没有在代码中的任何地方实现beforeRedirect

但是,正如我所说,这可以解决问题。