这是一个全局方法,设置session的
登陆时,用HomeController调用session_member存储session
然后在首页IndexController继承Controller
然后在HomeController里使用$this->data,数据为空,这是为什么?
这是一个全局方法,设置session的
登陆时,用HomeController调用session_member存储session
然后在首页IndexController继承Controller
然后在HomeController里使用$this->data,数据为空,这是为什么?
没仔细去考究你的代码,分析原因应该是版本问题,因为我之前貌似碰到过,后来为了便于管理,我单独建了一个自定义的Session Facade,不过官方也给出了推荐的做法,我们来看看5.3的升级文档对该问题的描述:
Session In The Constructor
In previous versions of Laravel, you could access session variables or the authenticated user in your controller's constructor. This was never intended to be an explicit feature of the framework. In Laravel 5.3, you can't access the session or authenticated user in your controller's constructor because the middleware has not run yet(你不能在控制器的构造方法中访问session或auth,因为中间件还没有运行).
As an alternative, you may define a Closure based middleware directly in your controller's constructor. Before using this feature, make sure that your application is running Laravel 5.3.4 or above:
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
class ProjectController extends Controller
{
/**
* All of the current user's projects.
*/
protected $projects;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->projects = Auth::user()->projects;
return $next($request);
});
}
}
你也可以参考下面的文章:
大家都在想办法帮你解决问题,但是我觉得实现自身业务时的思路就是问题的。
从代码逻辑来看,你是希望用户信息存储在 session
中方便存取,同时希望所有的 Controller 通过继承后,能够简单的拿到常用的数据。
其实完全没有必要性。
auth()->user()
原来我在 windows
上使用 php artisan serve
开发的时候也同样遇到了这个问题,我通过在 Session::put()
之后添加了 Session::save()
方法,成功读取到了数据。
所以,我换成了 Homestead
开发环境。
$member = session_member(); //这里输出一下$member;
session_member();这个没传值就调用下面:
function session_member(member){
return $member = session('member', null); //session('member', null)返回什么值?
}
一步步输出排查吧,另外能贴代码吗,贴图代码有错也不想给你改
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答577 阅读✓ 已解决
786 阅读
这样做真是多此一举,直接在view模板里用Session或session取值即可.