最近发表的话题
最近发表的评论
  • 收藏和取消收藏的接口可以合并为一个接口 at 3周前

    接口主要是供外部使用,目的是尽可能的职责单一,不要歧义。

  • 路由问题, ['only' => ['show', 'update', 'edit']]); 里面的 only 代表什么 .? ?看不懂 ? at 1个月前

    只是一个数组配置而已,你可以认为它是个过滤器。only键指向的数组是配置控制器方法。类似于白名单机制。这些内容文档上都写的有,好好读。

  • 所以这个 register 到底是用来干嘛的? at 1个月前

    其实做技术,是需要一定公设的。比如知识链A->B->C->D,由低级到高级。如果你知道A了解B,与你讲B哪怕是C,你可能会明白一点点,但若一开始与你讲D的知识,你会觉得这是什么鬼?看起来貌似都懂,做起来一脸??。对于这种情况,你至少有两种思路去解决,一 不管原理,先实现,有时间再深究。二,笨方法,也是最快的方法,读源码(好的代码会说话),D不懂没关系 ,你可以找到路径C,依次类推,直到找到能让你懂的点,串起来形成自己的知识体系。在这探索期间,不要觉得难,难的原因是你不会,不会学就好了。唯一可虑的是,总想一气呵成,而忘记了事实是检验真理唯一标准。至于laravel,真心话并非是适合菜鸟的入门框架。承认现实,每日精进。总有一天菜鸟会变老鸟。

  • Call to a member function getAllPermissions () on null 获取权限时候提示这个怎么回事呢? at 1个月前

    与postman高低版本没关系,关键在于你要传token,认证通过,才能获取用户实例。jwt的token可以在表单post,header头,url传递,对于laravel你也可以这样

    {{url}}/api/user/permissions?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vb...
  • 发现一处问题,如果把修改话题的路由放入不需要 token 验证的接口组里面,就不能通过 $this->authorize () 授权,怎么回事? at 1个月前

    授权判断本质通常都是将当前用户的标识,与资源关联的用户标识比较,相同则通过。对于使用jwt为api驱动的guard而言,你不用那个是中间件,框架获取不到当前用户的标识id(一边无值,一边有值),自然不通过。简单而言,你的这种操作想通过,只要保证操作的话题关联用户标识user_id为空就行了。

  • 如何查看源码? at 1个月前

    Auth::guard('api')->factory()->getTTL() * 60源代码简析
    本想简述你框红的代码源码逻辑,但再简还是发现以按照执行顺序下这几个类你是逃不过的。
    原则:碰到找不到的方法看魔术方法,另一个就是容器解析类名或服务名

    1. Illuminate\Support\Facades\Auth, // 访问Auth(别名)类其实就是访问此类,最终返回static::$app[$name] 实例,$name为’auth‘
    2. ’\Illuminate\Auth\AuthManager‘ // 容器解析auth别名服务 最终到达此实现类实例,找寻此类guard方法
    3. Tymon\JWTAuth\Providers\LaravelServiceProvider // 在执行之前guard('api') ,因配置api 的driver项为jwt,auth别名服务已经注册了扩展jwt项驱动实现(此处代码属于注册生产代码,实际执行顺序在服务解析之后启动,注意看父类的extendAuthGuard方法)
      4.Tymon\JWTAuth\JWTGuard //在执行 Auth::guard('api')返回此类的实例
      5.\Tymon\JWTAuth\JWT //在执行Auth::guard('api')->factory()时,显然JWTGuard类中无factory方法,魔术方法指引到本类中寻找factory方法
      6.\Tymon\JWTAuth\Manager // jwt类有factory方法内部 返回调用了本Manager类的getPayloadFactory方法
      7.\Tymon\JWTAuth\Factory // 前一类的getPayloadFactory方法内,返回了本类的实例,即Auth::guard('api')->factory()指向此类实例
      8.\Tymon\JWTAuth\Claims\Factory //执行Auth::guard('api')->factory()->getTTL() 返回 调用本类的getTTL() 方法
      即返回本类ttl属性值,而这个值是即是来自于jwt配置文件内的值,如若无配置文件会从jwt的copmoser包内的配置获取默认值(这类动作在jwt相关服务注册阶段就干了)
      // Illuminate\Support\Facades\Auth.php
      // 当你访问\Auth::guard('api') 先找到,最终
      public static function __callStatic($method, $args)
      {
          $instance = static::getFacadeRoot();  // 返回从容器中解析的服务别名‘auth’ 实例,即 \Illuminate\Auth\AuthManager实例
          return $instance->$method(...$args);
      }

      本想一步步写完,一看已经这么长了,兄弟你还是看源码吧。

  • Socialite Providers 的属性? at 1个月前

    关键 是之前在事件服务内注册了一个事件监听器。而主流程是服务注册->启动

       protected $listen = [
            \SocialiteProviders\Manager\SocialiteWasCalled::class => [
                'SocialiteProviders\Weixin\WeixinExtendSocialite@handle',
            ],
        ];

    而 SocialiteWasCalled事件,是在weixin(延迟)服务启动时触发,如下

    namespace SocialiteProviders\Manager;
    ....
        public function boot()
        {
            $socialiteWasCalled = app(SocialiteWasCalled::class);
            event($socialiteWasCalled);
        }

    然后它的监听器是这样

    namespace SocialiteProviders\Weixin;
    ...
      /**
         * Register the provider.
         *
         * @param \SocialiteProviders\Manager\SocialiteWasCalled $socialiteWasCalled
         */
        public function handle(SocialiteWasCalled $socialiteWasCalled)
        {
            $socialiteWasCalled->extendSocialite(
                'weixin', __NAMESPACE__.'\Provider'
            );
        }

    显然监听器内逻辑对微信驱动器进行了扩展,见SocialiteProviders\Weixin\Provider类,主要扩展以下两个公开方法
    getAccessTokenResponse、setOpenId
    至于方法userFromToken则是使用AbstractProvider所实现的方法,你如果只看用法的话,直接看接口类就行了比如Laravel\Socialite\Two\AbstractProviderLaravel\Socialite\Two\ProviderInterface(one,two为oauth协议,这取决于你的配置文件),至于能这样实现,是因为一系列的社会化登录provider都会实现这两个接口,或在这两个之扩展。
    简述:对于微信provider方法,你在AbstractProvider类与Weixin\Provider类下找公有方法签名,就当查看文档了。

  • 所有的代码都是与教程一样的,但是为什么我运行迁移时,会报错?数据损坏问题仍未解决? at 1个月前

    目测,1.你的数据重复录入了
    2.数据库内有脏数据,即该删除的没有删除干净。
    执行如下命令即可

    php artisan migrate:refresh
    php artisan db:seed
  • 站点配置有点小缺陷 at 1个月前

    是你打开方式不对。要先配置完站点(配置保存会自动生成配置文件)保存,修改完毕前台模板头尾部,最后访问前台,前台页面才会读到相应信息。

  • 管理员后台是否无法适应复杂度高的用户场景? at 1个月前

    只是一个练手而已,足够了。

  • 点关闭和保存也是上传图片,谷歌浏览器也一样,怎么办呀? at 1个月前

    改字体值后,ctrl+F5大刷新清缓存。如果担心硬改会影响其他地方,可以在每次提交之前,手动编辑font-size
    值,确保上传input框不要遮住保存提交按钮就可以了。

  • 麻烦告诉下这是哪里出问题了?,代码复制的 at 1个月前

    报错很明显,你配置的目录 不存在。

  • 为什么安完 Sudosu 后,点击用户名下拉菜单出不来啦? at 1个月前

    看代码

  • @will_lin 在 2018-06-29 08:56:11 的动弹 at 1个月前

    睡不足,就补充睡眠。不会,就学。不要在困的情况下,做重要的事。

  • 如何解决 permission 效率低下的问题? at 1个月前

    缓存吧

  • 想问下在模版里分页调用 render () 这个方法,能解释下这个方法吗?,在文档分页里没找到这个方法的介绍 at 1个月前

    render方法签名如下,其本质上就是返回一个分页信息的html字符串,源码链接在此

    /**
         * Render the paginator using a given view.
         *
         * @param  string|null  $view
         * @param  array  $data
         * @return string
         */
        public function render($view = null, $data = []);
  • 字都认识,但还是懵懵懂懂? at 1个月前

    其实用这些,有前置条件。表与表之间的关系,用对象的形式如何来表示表。在用这些文档之前,需要有sql多表联查的经验,至少得知道主键,外键,中间表,一对多,多对多指的是什么,才可以的。

  • 很好奇 Laravel 策略的设计方式是怎么实现的? at 1个月前

    对于同一资源 一般有以下这几种方式 增store,删除destroy,改update,查show,索引index,需要比对值(真假)。gate的本质(高级点说法就是策略)其实就只是判断当前操作者,是否有上述动作的操作权限,比较的值通常是看资源有否用户标识的指向。显然除了删除权限一般是留给管理员或本人的外,你如果有了更新update操作的权限。也意味着show,index都有了(要改东西,至少得看到才可以)。而update与store区别就在于是否需要新增主键,二者权限相近。所以一般情况下,只是为了初步的权限控制,只需要update就可以满足基本需求了。毕竟策略的本质,在大部分需求下,就是看你是不是资源的拥有者。所以一个update就可以了。至于你所认为的多个策略,导致相同的方法。根本不是问题,虽然user还是那个user,但是你是拿你的user_id与资源关联标识比较。比如,当前用户的id 与存在post表,comment表等中user_id比较而已。请注意update比较的不是user表中的update方法,它用的策略类中的方法。

  • [武汉][7K-10K] 美美咖招聘 PHP 工程师 3 名 at 2个月前

    为什么不用vue啊

  • Laravel 的事件广播相和队列之间的联系(event 和 job) at 3个月前

    首先明确队列通常是用来处理延迟任务的,事件广播说白点就是业务处理逻辑通知。从某种意义上来说,事件广播是一个执行动作。所以如果你的广播逻辑,并不需要立即执行的话,即有异步的需求。可以将事件广播做成任务,分发到队列中。任务是一段处理逻辑,而事件是一个切面点,即是一个时间的触发点,本质上就是一个钩子。如果用炸弹来形容,后者相当于引线,前者类似于爆炸装置。用单一函数表示,一个函数定义就是一个任务,一个带条件的函数调用,就是事件触发了。即定义与执行分开了。所以准确来讲是这样:消费队列->任务->事件->广播 ,而你所做的仅只是将埋有引线的任务,加到队列(任务分发到队列)中去了。它从始至终都没有进行过真正的处理,只是在你消费队列时,由容器帮你执行。