【问题标题】:Laravel 5.0 Session can't use static methodsLaravel 5.0 Session 不能使用静态方法
【发布时间】:2014-11-25 12:37:03
【问题描述】:

我正在尝试使用 Laravel 5.0 创建应用程序,但在 BaseController 构造函数

中使用 Session 方法时遇到问题

这是我的 BaseController 和它的构造函数。

use Symfony\Component\HttpFoundation\Session\Session;

class BaseController extends Controller {

    /**
     * Initializer.
     *
     * @access   public
     * @return \BaseController
     */
    public function __construct()
    {

        //set default lang
        if (!Session::has('lang')) {
            Session::put('lang', App::getLocale());
            Cookie::forever('lang', App::getLocale());
        } else {
            App::setLocale(Session::get('lang'));
        }


    }
}

但我收到此错误

BaseController.php 第 22 行中的 ContextErrorException: 运行时注意事项:非静态方法 Symfony\Component\HttpFoundation\Session\Session::has() 不应被静态调用,假设 $this 来自不兼容的上下文

有谁知道我做错了什么?

【问题讨论】:

  • 听起来很奇怪...顺便说一句,如果我是你,我会尝试通过调用 Session() 作为新对象来解决这个问题。 $session = new Session(),然后是 $session->has('lang')。这不是“Laravel 风格”,但应该可以。
  • 如你所见,这是 Symfony2 的 Session 对象,它没有这么糟糕的静态接口。如果你想拥有它,请使用 Laravel 的“外观”类:laravel.com/docs/4.2/session

标签: php session laravel laravel-5


【解决方案1】:

代替:

use Symfony\Component\HttpFoundation\Session\Session;

你应该使用:

use Session;

在此处导入 Session。

【讨论】:

  • 谢谢你的问题:)
  • 如何告诉 Visual Studio Session 存在,因为它显示 Undefined type 'Session' for Session::get('something');
【解决方案2】:

您正在导入错误的类。 Symfony\Component\HttpFoundation\Session\Session 是 Laravel 在调用 Session:: 外观时使用的类 - 但它们不是同一个类,Symfony 的会话类不使用 has() 的静态方法。我自己没有使用过 Laravel 5,但我认为它在顶级命名空间中。

【讨论】:

  • 哦,好吧,我没有注意到他正在导入课程。我们开始吧,这就是为什么!
猜你喜欢
  • 2023-02-22
  • 2018-02-23
  • 2020-12-27
  • 2011-03-02
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多