精华内容
下载资源
问答
  • 原文链接:Laravel 构造函数里面重定向跳转无反应【原创】 刚开始接触laravel会遇到这样一个问题,我们在判断用户未登录时跳转至登录页面一般都是建一个控制器基类,在基类的构造函数里面进行判断,如果未登录就...

    原文链接:Laravel 构造函数里面重定向跳转无反应【原创】

    刚开始接触laravel会遇到这样一个问题,我们在判断用户未登录时跳转至登录页面一般都是建一个控制器基类,在基类的构造函数里面进行判断,如果未登录就重定向到登录页

    我用tp比较多,在tp控制器的构造函数里面可以直接使用redirect函数进行跳转动作,然而在laravel却不行,这里要提一个东西,那就是中间件,可以很完美的满足我们的需求,当然这篇文章仅供新手参考,大佬勿喷。

    首先在app\Middleware目录下新建一个中间件,这里我命名为CheckLogin

    namespace App\Http\Middleware;
    use Closure;
    use Illuminate\Auth\Middleware\Authenticate as Middleware;
    class CheckLogin extends Middleware
    {
        public function handle($request, Closure $next, ...$guards)
        {
            $response = $next($request);
            if(!session('user')){//判断用户未登录就跳转至登录页面
                return redirect('login');
            }
            //如果已登录则执行正常的请求
            return $response;
        }
    }

     

    然后在app/Http/Kernel.php里面的$routeMiddleware数组里面,将刚新建的中间件加进去,别名自己命名。我这里命名的是'check.login'。

    image.png

    新建一个控制器基类,在这个基类的构造函数里面去注册这个中间件。除了登录控制器其他的需要用户登录控制器都继承这个基类,这里我命名为BaseController。

    namespace App\Http\Controllers\Index;
    use App\Http\Controllers\Controller;
    class BaseController extends Controller{
        public function __construct()
        {
           $this->middleware('check.login');//检测登录
        }
    }

     

    这样请求如果用户未登录就会重定向到登录页面了。

     

    tp里面也是有中间件,用法也基本一样,因为我比较懒再加上可以直接重定向跳所以就没咋用。

     

    PS:2019/10/24今天在研究tp6的时候发现,直接redirect('xxx/xxx')->send()即可,而不是return,由于框架请求流程机制,这种写法注意如果你send后面的代码在跟判断是否登录的条件紧密相连时在send后可能会有报错,因为框架在响应对象的send方法输出后整个请求流程并没有结束,所以如果遇到报错可以在send后强行终止代码运行,如:redirect('xxx/xxx')->send();exit();,但最好是通过修改判断排除这些报错。

    展开全文
  • <?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Requests;use App\Http\Controllers\Controller; class CommonController extends Controller{ public fun...


    <?php


    namespace App\Http\Controllers\Admin;


    use Illuminate\Http\Request;


    use App\Http\Requests;
    use App\Http\Controllers\Controller;


    class CommonController extends Controller
    {
        public function __construct(Request $request){
            
            if(!$request->session()->has('user_info')) {
                redirect('/login')->send();
                
            }else{
                $this->check_auth();
            }
            
        }
        public function check_auth(){
            redirect('/')->send();
        }


    }
    注意:不能使用return 来跳转,正确跳转写法:redirect('/login')->send();

    转载于:https://www.cnblogs.com/Ares0023/p/10429656.html

    展开全文
  • <p>Maybe I'm searching it all wrong but I haven't been able to figure out an answer.. Say I have a model Building, which always has <em>n</em> Floor(s) <p>I would like to write a constructor for ...
  • 描述了这个问题: https://laravel-china.org/topics/3218/laravel53-middleware-and-controller-construction-method-execution-sequence-problem /* 它里面提到了一句: 不可在构造函数中,直接...
    今天想重构下代码结构:  
          
            BaseController.php 放置公共的中间件  
            class BaseController  
            {  
                public function __construct(){  
                    $this->middleware('login');    
                }  
            }  
          
            IndexController.php 继承 BaseController  
            class IndexController extends BaseController  
            {  
                $user;  // 存储登录用户实例  
                public function __construct(){  
                    parent::__constuct();  
                    $this->user = Auth::user();  
                }  
            }  
          
            --------------------  
          
            如上代码,一直报错!提示获取不到用户实例!  
            各种测试,kernel.php, route.php, BaseController, middleware写法,等等,找不到问题。甚至一度怀疑 parent::__contruct()继承不对...  
          
            最终发现,是构造函数和中间件的执行顺序有问题:  
                1.先执行构造函数  
                2.再调用中间件  
            所以,我的问题就是,login中间件要求用户登录,而构造函数又先执行了,直接获取用户信息,还未登录呢!  
          
          
            百度发现一篇文章,描述了这个问题:  
                https://laravel-china.org/topics/3218/laravel53-middleware-and-controller-construction-method-execution-sequence-problem  
          
            /*  
                它里面提到了一句:  
                    不可在构造函数中,直接获取到session变量或认证后的用户实例!因为中间件还未启动!  
          
                这个描述的不准确!  
                    在用户登录后,构造函数中,自然就获取到session变量或认证后的用户实例!  
          
                主要还是中间件未在之前执行!说白了就是顺序的问题!  
            */  
          
            解决方法:  
                都只能在route.php 中了  
                    1>要么使用 route::get()->middle('login')  
                    2>要么使用 route::get(['middleware' => 'login', xxx])  
                最好的方法,应该是使用路由组 route::group(['middleware' => 'login'])  
          
                或者是:  
                    抛弃在控制器中使用用户实例  
    展开全文
  • 主要介绍了Laravel实现构造函数自动依赖注入的方法,涉及Laravel构造函数自动初始化的相关技巧,需要的朋友可以参考下
  • 留给自己马克一下   public function __construct() { $this-&gt;request = request(); // 验证是否登录 $this-&gt;middleware(function ($request, $next) { if (!\Session::get('user')) { ...

    留给自己马克一下

     

    public function __construct()
    {
        $this->request = request();
    
        // 验证是否登录
        $this->middleware(function ($request, $next) {
            if (!\Session::get('user')) {
                echo "<script>alert('请先登录!');location.href='" . url('admin/login') . "';</script>";
            }
            return $next($request);
        });
    }

     

    展开全文
  • Laravel 以前的版本中,可以在控制器构造函数中获取 session 变量或者认证后的用户实例。 在 Laravel 5.3 中,在控制器构造函数中不再能够直接获取到 session 变量或认证后的用户实例,因为中间件还未启动。 仍然...
  • laravel 辅助函数

    2020-06-28 13:46:07
    laravel 辅助函数 方法列表 array_add 如果给定的键不存在数组中,那么array_add函数将会把给定的键值对添加到数组中 array_add([‘name’=》‘desk’]); array_collapse 函数将多个数组合并为一个数组 array_...
  • 构造方法执行的时候web中间件还未执行因此无法使用session 但我们可以在构造方法内通过定义中间件来使用session public function __construct(Request $request) { $this->middleware(function ($request, $...
  • 2.在控制器构造函数获取用户session,但是获取不到。特别纳闷,一开始以为session没开启,查看http里里面的kernal配置 3.核心文件session已经开启,找了半天,一直在看session为啥没写入。但是redis有写入啊,我...
  • laravel5.3 中间件与构造函数的详解

    千次阅读 2019-01-22 09:35:58
    经过一系列测试,最终发现,是构造函数和中间件的执行顺序有问题: 1.先执行构造函数 2.再调用中间件 什么是中间件? 对于一个Web应用来说,在一个请求真正处理前,我们可能会对请求做各种各样的判断,然后才...
  • public function __construct() { $this->request = request(); // 验证是否登录 $this->middleware(function ($request, $next) { if (!\Session::get('id') &am...
  • laravel构造器的CURD

    2020-04-27 18:28:52
    这里主要记一下关于用laravel写相关接口的一些知识点,方便以后查阅,基本都是Controller里面的一些操作 查询数据: // 查询数据 $query = DB::table('think_data')->where([ ['status','>',500]])->get...
  • 在之前的Laravel版本中,您可以访问会话变量或控制器构造函数中已通过身份验证的用户。这从来没有打算成为框架的明确特征。在Laravel 5.3中,由于中间件尚未运行,因此无法访问控制器构造函数中的会话或已认证的用户...
  • 建设者 这是用于通过模式与模型和/或控制器生成迁移的软件包 依存关系 要使用控制器,需要安装此软件包 要使用需要安装此软件包 安装 通过作曲家 $ composer require denis-kisel/constructor 用法 ...
  • <p>as mentioned in the documentation of Laravel 5.3 i am trying to add a middleware callback in the constructor of a controller <p>Controller's also allow you to register middleware using a ...
  • laravel5.4控制器构造函数取不到用户信息解决方案 http://www.xiaoshu168.com/php/207.html
  • <p>I'm using a Policy Class to authorize some users(authors or admins) to update and delete records from Post Model. It is a simple CRUD. The question is: How can I make a policy check run for ...
  • <p>So, I'm currently working on a browser game in Laravel. So far I love the framework, but I haven't really got much experience, and I just can't get this to work. <p>Basically I'm trying to update ...
  • <p>Is it bad practice for me to set the auth user inside my base controller as follows: <pre><code> abstract class ...<p>I'm asking based on taylors comments (<a href="https://laravel-news....
  • 想在控制器的构造函数中取出登录的用户 ,保存到类的属性中。 当然可以用Auth::user(),可以做到,但是不想这么做。 没想到这个属性一直是空的。后来用xdebug调试,在中间件handle和构造函数处都打了个断点。 发现是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,958
精华内容 1,183
热门标签
关键字:

laravel构造函数