laravel 基础面试题-偏交谈-2020-12-29-laravel 综合话题-监听-策略类-策略设计模式
感谢关注本人公众号: 上海 PHP 自学中心
qq群(3年2万):517085546
laravel 基础面试题-偏交谈-2020-12-29-laravel 综合话题-监听-策略类-策略设计模式
1. laravel 监听器 - listeners.
监听器 - listeners 用于处理事件和异常。 Laravel 中用于登录事件的最常见的监听器是 LoginListener。
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 响应:
3. 什么是策略模式?
定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。 《设计模式》
定义了一族算法(业务规则);
封装了每个算法;
这族的算法可互换代替(interchangeable)。 维基百科
完全无法理解有木有?
- 看一个例子:
比如说我,
我住在公司附近。
骑单车要十分钟左右。
走路需要二十分钟左右。
但是我需要根据天气来选择到底是骑单车还是走路。
下雨的话,没办法骑单车只能走路过去了。
晴天就可以睡晚一点骑单车去。
思考
laravel策略可以用来做啥
策略模式的应用场景
防爬虫说明
禁止 学习某地爬虫,知乎爬虫,CSDN 爬虫。
本文,首发在 learnku 社区。
@author
汪春波(www.shxdledu.cn)