手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

我一直认为已经没用的laravel-ide-helper还在更新

 如题,真没想到barryvdh/laravel-ide-helper还在更新。毕竟现在phpStorm已经功能这么强大了,我想它应该是没有用了吧!结果在看到LaravelQuery的插件时,提到了它,同时提到的还有LaravelIdea。毕竟 LaravelIdea是要钱的。还挺贵。所以又composer require了一下barryvdh/laravel-ide-helper。

 
然后php artisan ide-helper:model,发现他把scopeFilter这样的方法加进注释啦,这个确实挺方便。不然每次我都 要自己在写了scope方法后,还得主动到注释里加上。否则 IDE会认不出 filter()后的方法。
 
例如:
PHP代码
  1. function scopeIsActive($query ){  
  2.     $query->where('status','=','active');  
  3. }  
在用的时候 Model::query()->isActive()->get(); 写到 isActive()后,后面的方法都认不出来。
因此,在这时候 只能在Model类里加入
PHP代码
  1. /** 
  2.  * @method static \Illuminate\Database\Eloquent\Builder|ModelName isActive() 
  3.  */  
当然不是不能写,只是每次这么写就有点累罢了
其他的生成对 phpstorm来说感觉用处没有那么大,当然如果你象官方那样进行扩展的话,倒也不是不可以。
 
 

belongsToMany的备份

 纯备份,长时间不用的时候 直接就忘了

 
PHP代码
  1. class Shop{      
  2.     /** 
  3.      * 员工 
  4.      * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany 
  5.      */  
  6.     public function staffs()  
  7.     {  
  8.         // 1、目标类 UnionUser,
  9. // 2、中间表的表名 pivot: union_user_store,
  10. // 3、中间表对应当前表的字段 :shopcode ,
  11. // 4、中间表对应目标类的字段 usercode  
  12.         //  当关联不是ID时,需要有5、6参数  
  13.         // 5、当前类对应 3的字段 (code -> 3:shopcode)  
  14. // 6、目标类对应4的字段 (usercode -> 4:usercode )  
  15.         return $this->belongsToMany(UnionUser::class, UnionUserStore::getTable(), 'shopcode''usercode''code', UnionUser::USERCODE);  
  16.     }  
  17. }  
 
---EOF--

laravel debug模式下抛出异常时隐藏关键字段

laravel在debug模式下抛出异常时,会把当前的环境变量等打印出来,即使是开发机、测试机,其实有时候也不希望将一些关键的变量公开给所有人,比如密码、APPKEY(主要是不少人在上传的时候APPKEY本地和服务器一致),还有各类OSS、微信的appId,secret,token等,所以就需要在抛出异常时隐藏掉。

 
网上查到的是在config/app.php中增加:debug_hide 的数组下标,对应的数据是_ENV,_SERVER,其实就是把遍历这些全局变量,对指定的KEY进行隐藏。但偶尔也查到有debug_blacklist。于是全文搜索了一下,发现框架里是:foreach([config('app.debug_hide'),config('app.debug_blacklist')]),看来这是一个历史 遗留问题。
 
知道怎么写之后就方便了。例如:
'debug_hide'=>[
    '_ENV' => ['APP_KEY']
]
,随便抛一个异常可以看到 ,输出的APP_KEY的地方,已经不再是标准值了,而是一堆***,关键变量其实有很多,如果一个个写,感觉有点累,再加上,它不支持 * 的模拟判断,比如*KEY*,则完全无效。于是偷了个懒:
'debug_hide'=>[
    '_ENV' => array_filter(array_keys($_ENV),fn($v)=> Str::contains(strtolower($v), ['oss_', 'db_', 'cookie', 'key','secret', 'password', 'aliyun']) ),
]
既然都在debug_mode下了。也不在乎这点性能了。。
tips:
1、不能用str($v)->contains,因为str这个helper函数,居然还调用了env的class,而在刚加载config文件时。env的类还没有加载进来。
2、strtolower,是因为Str::contains不能忽略大小写。虽然.env都是标准的大写,但你不能保证其他人有没有写小写(又不能抽他们)。所以先tolower一下
 
解决!
 

Sablog-x 1.6升级支持PHP8成功

 发现从PHP7.4升到PHP8后,就一个地方,那就是 get_magic_quotes_gpc 这个函数。报错信息是:PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function get_magic_quotes_gpc()。

方法未定义?看了下文档,原来从7.4.1开始就已经不再支持了,而且永远返回False,在PHP8中彻底移除,仅此而已,于是乎。。。。
在 include/common.php 文件中,在调用 get_magic_quotes_gpc上面加了一段 :
if(!function_exists('get_magic_quotes_gpc')){
    function get_magic_quotes_gpc(){
        return false;
    }
}
然后,一切正常,所以我就不再上传新包了。(页面详情可能有不正常的情况,是因为我在上一页下一页的时候。$article[articleid]上没有加单引号,进入后台在模板管理 default/show.php 搜到 57行,下一篇的链接就是 ,调整一下即可)
 
----
改完后才发现,问题很多啊。。。比如 global.php的296行,$article[image] ,这种代码太多了。。。。估计得一点点改了,php4的后遗症啊。
 
----
只能说解决了95%的问题,其它的只能遇到后慢慢改了。。。我也不可能一个个的去定义:define('image','image');。当然 这样就彻底解决了,只是有点2
 
 

Error in render: "Error: Ziggy error: 'project' parameter is required for route 'projectPage'."

 在使用Ziggy的时候,偶尔会报类似的错误:

Error in render: "Error: Ziggy error: 'project' parameter is required for route 'projectPage'."。
仔细看出错的路由,往往都是有必要参数的,比如Route::any('/test/{user:uuid}',[UserController::class,'test'])->name('test')
象这种路由,如果在JS中直接获取route().current()来获取当前路径并显示,那肯定就会报错。因为current()方法是将参数和路由一并显示出来。
route(route().current())这样的报错怎么处理呢?
其实,只要加上params参数就行了,例如:route(route().current(),route().params).toString(),为什么会有这么妖的写法?是因为在公众号的网页里,如果你要用jssdk,就必须是当前URL,如果不正确,获取的签名也就可能是失败的,因此,才想到用这个恶心的方法。当然你也可以用location.href...
 
 
Records:64712345678910»