Php BaseController中的会话变量问题
问题Php BaseController中的会话变量问题,php,laravel,laravel-5.3,laravel-5.4,Php,Laravel,Laravel 5.3,Laravel 5.4,问题 Session::get在基本控制器中不工作 class LoginController extends \App\Http\Controllers\Web\BaseController { public function Login() { return View("UserManagement.Auth.Login.login"); } } class BaseController extends Controller { public fun
Session::get
在基本控制器中不工作
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
return View("UserManagement.Auth.Login.login");
}
}
class BaseController extends Controller
{
public function __construct() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
}
}
class BaseController extends Controller
{
}
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
return View("UserManagement.Auth.Login.login");
}
}
下面的大小写未显示正确的会话值
登录控制器
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
return View("UserManagement.Auth.Login.login");
}
}
class BaseController extends Controller
{
public function __construct() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
}
}
class BaseController extends Controller
{
}
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
return View("UserManagement.Auth.Login.login");
}
}
基本控制器
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
return View("UserManagement.Auth.Login.login");
}
}
class BaseController extends Controller
{
public function __construct() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
}
}
class BaseController extends Controller
{
}
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
return View("UserManagement.Auth.Login.login");
}
}
下面的案例显示了正确的会话值
基本控制器
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
return View("UserManagement.Auth.Login.login");
}
}
class BaseController extends Controller
{
public function __construct() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
}
}
class BaseController extends Controller
{
}
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
return View("UserManagement.Auth.Login.login");
}
}
登录控制器
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
return View("UserManagement.Auth.Login.login");
}
}
class BaseController extends Controller
{
public function __construct() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
}
}
class BaseController extends Controller
{
}
class LoginController extends \App\Http\Controllers\Web\BaseController
{
public function Login() {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
return View("UserManagement.Auth.Login.login");
}
}
这里的问题是,我必须在许多控制器中使用基本控制器。是否有任何方法可以使会话在基本控制器中工作?根据以下URL,您不再能够在Laravel 5.3中控制器的构造函数中使用会话。这是因为在构建控制器时,处理会话的中间件尚未运行。显然,能够访问控制器中的会话从来不是预期的功能。由于这会影响会话,您也将无法访问控制器构造函数中经过身份验证的用户 然而,解决这个问题的一种方法是在构造函数中使用基于闭包的中间件
class BaseController extends Controller
{
public function __construct()
{
$this->middleware(function ($request, $next) {
if(\Session::get("CurrentLanguage") != null) {
dd('here');
\App::setLocale(\Session::get("CurrentLanguage"));
}
else {
dd('here1');
\Session::put("CurrentLanguage", "en");
\App::setLocale("en");
}
return $next($request);
});
}
}
这是因为您的控制器只是定义了一个中间件,以便在会话可用之后运行
它在第二个示例中起作用的原因是您正在使用控制器方法访问会话。此时会话可用,因为中间件已经运行。所以它不工作,因为会话在BaseController中不可用?它不工作,因为会话在控制器的构造函数中不可用,即
\uu构造(…)
。在您的例子中,您是在BaseController::\uu construct()
中编写代码的。我的建议对你有用吗?