【问题标题】:Attempted to call an undefined method named "redirect" error in Symfony 4尝试在 Symfony 4 中调用名为“redirect”的未定义方法错误
【发布时间】:2019-04-09 15:09:57
【问题描述】:

我的代码中有这个错误,我写了“使用”,但我有这个错误:

试图调用类的名为“redirect”的未定义方法 "App\Controller\SetlocaleController"。

我的代码:

<?php 

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\RedirectResponse;

class SetlocaleController extends HomeController {

    public function __construct(\Twig\Environment $twig)
    {
        $this->twig = $twig;
    }

    public function setLocaleAction(Request $request, $language = null)
    {
        if($language != null)
        {
            $session->set('_locale', $language);
        }

        $url = $request->headers->get('referer');
        if(empty($url))
        {
            return new response($this->twig->render('page/home.html.twig'));
        }
        else{
            return $this->redirect($url);
        }
    }
}

你有答案吗?

【问题讨论】:

  • 你使用$this-&gt;redirect()的方法,但是没有这样的东西。它没有在你的类中定义,大概也没有在父类中定义。
  • 您的HomeController 是从AbstractController 扩展而来的吗?

标签: php symfony symfony4


【解决方案1】:

最佳实践解决方案

按照 Symfony 控制器文档的最佳实践中的建议,确保在控制器上扩展抽象控制器。

// HomeController.php

// ...
class HomeController extends AbstractController {
// ...

SetlocaleController 无需额外更改。但是,如果 RedirectResponse 不再使用,您可以删除它的导入 use Symfony\Component\HttpFoundation\RedirectResponse;


使用 HttpFoundation\RedirectResponse 的解决方案

您需要使用已经导入的RedirectResponse 对象。不要使用代码:return $this-&gt;redirect($url);,因为正如错误所示,没有为您的类定义 redirect(url) 函数。

return new RedirectResponse($url);

【讨论】:

  • 请检查您的 HomeController 是否从 AbstractController 扩展为使用 "$this->redirect()" 帮助器
  • 正如 ninjaTN 所说(并且认为,我猜),使用 symfony 提供的帮助程序是更好的做法。检查您的控制器是否正在扩展AbstractController,如果不添加它,它将简化您以后的生活:docs hererecommended/best practices here
  • @Etshy 我已经用最佳实践解决方案更新了答案。谢谢你们的意见
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多