laravel 基础面试题-偏交谈-2020-12-29-laravel 综合话题-监听-策略类-策略设计模式

未匹配的标注

感谢关注本人公众号: 上海 PHP 自学中心
qq群(3年2万):517085546

laravel 基础面试题-偏交谈-2020-12-29-laravel 综合话题-监听-策略类-策略设计模式

1. laravel 监听器 - listeners.

监听器 - listeners 用于处理事件和异常。 Laravel 中用于登录事件的最常见的监听器是 LoginListener。

laravel事件系统

2. 什么策略类?

Policy(策略)是用于组织基于特定模型或资源的授权逻辑类,例如,如果你开发的是一个博客应用,可以有一个 Post 模型和与之对应的 PostPolicy 来授权用户创建或更新博客的动作。

  • 创建一个policy.php文件,比如说要个post模型创建授权逻辑类,php artisan make:policy PostPolicy
  • 创建成功之后,会出现在app/policies的文件夹中

然后在app/providers/AuthServiceProvider中的数组$policies中添加

//之前会有一个示例,如果没有用的话。可以注释

'App\Post' => 'App\Policies\PostPolicy',

添加完成之后,在PostPolicy.php中可以写自己需要设置权限的方法,例如update和delete两个方法

<?php

namespace App\Policies;

use App\User;
use App\Post;
use Illuminate\Auth\Access\HandlesAuthorization;

class PostPolicy
{
    use HandlesAuthorization;

    /**
     * Create a new policy instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    public function update(User $user, Post $post)
    {
      //判断修改改文章的是不是本文作者
        return $user->id === $post->user_id;
    }
    public function delete(User $user,Post $post)
    {
        //判断修改改文章的是不是本文作者
        return $user->id===$post->user_id;
    }

}

在controller中,需要进行验证的方法中进行判断权限

//只属于本文作者对该文章进行删除操作
public function delete(Post $post)
    {
        $this->authorize('delete',$post);
        $post->delete();
        return redirect('article/index');
    }
  • 除了提供给 User 模型的辅助函数,Laravel 还为继承自 App\Http\Controllers\Controller 基类的所有控制器提供了 authorize 方法,和 can 方法类似,该方法接收你想要授权的动作名称以及相应模型实例作为参数,如果动作没有被授权, authorize 方法将会抛出 Illuminate\Auth\Access\AuthorizationException ,Laravel 默认异常处理器将会将其转化为状态码为 403 的 HTTP 响应:

laravel 策略类

3. 什么是策略模式?

定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。 《设计模式》

定义了一族算法(业务规则);
封装了每个算法;
这族的算法可互换代替(interchangeable)。 维基百科

完全无法理解有木有?

  • 看一个例子:

比如说我,

我住在公司附近。

骑单车要十分钟左右。

走路需要二十分钟左右。

但是我需要根据天气来选择到底是骑单车还是走路。

下雨的话,没办法骑单车只能走路过去了。

晴天就可以睡晚一点骑单车去。

策略模式初探
策略模式详解

思考

  1. laravel策略可以用来做啥

  2. 策略模式的应用场景


防爬虫说明

禁止 学习某地爬虫,知乎爬虫,CSDN 爬虫。
本文,首发在 learnku 社区。

@author
汪春波(www.shxdledu.cn)

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
发起讨论 只看当前版本


暂无话题~