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

用 laravel11 + Filament 来尝试写博客 (一)

 Laravel 官方在推上说即将推出 Laravel11,这次的推出的版本将以极致的精简,而且去掉了很多原来为了结构而分拆的文件。象 Console/Http 下的 Kernel 文件,全部去掉,而且改 bootstrap/app.php 来实现了,在路由里甚至留了一下 health 。用于其他监控项目来检查服务器是否正常。默认是:http://{hostname}/up,我在本地运行下来,执行时间是39ms,所以我就更加想尝试用11来把我当前的博客重写一下(之前写的时候 ,都是考虑直接使用原来的数据库结构,导致写了几次都发现很不 laravel,所以几次就放弃了)

 
Filament,是一个后台管理项目,基于 livewire 的(关于 livewire,可以查看 https://livewire.laravel.com ),号称是不用写 JS 的后台管理。之所以选择这个,是本来几年前用的是 dcat-admin,然而作者也已经好多年没更新了(这就是使用第三方开源项目的尴尬之处,作者也不太可能用爱发电,如果项目没有赢利或者找不到赢利点,这个项目很可能就无疾而终了)。而选择 filament 也是因为看中了他的生态,有完善的插件平台(有免费和付费插件)。一旦有人购买插件,会促使更多的人使用并扩展(搜了一下,其实有不少类似的,象:splade.dev / tomatophp / nova[官方] ),但目前看下来,好象还在持续更新的就是 filament 了。在推上也能看到 filament 挺活跃。所以选择它做为接下来3年的后台管理。
 
今天就先到这里先介绍一下这两个项目,然后准备开始写,遇到踩坑的地方也会记录一下。
项目开始其实很方便
laravel new blog,就可以初始化项目了。因为考虑到其实暂时不需要前台登录,所以没有用 breeze 和 jetstream。
项目初始化后,运行 composer require filament/filament 就可以安装好filament 了
这时候还要运行 php artisan filament:install --panels。安装完面板后,可以通过安装时指定的路由进行访问(默认是 admin,可以在运行的时候 进行设置)【备注:后期要修改的话,可以在 app/Providers/Filament/AdminPanelProvider.php 中进行调整】
但此时还不能登录,因为没有 breeze 和 jetstream ,所以连注册也没有,此时只能通过 php artisan make:filament-user 来新建一个用户。
此时,filament就已经安装完了。项目正式启动。

 

Tags: laravel, filament

一个#[Modelable]解决了所有烦恼

 在使用livewire的过程中,由于没看文档,浪费了不少时间 ,比如 多个组件在往下传递的时候 ,某个子组件中其实有很多值需要向外变更,但事实上只有一个有效值 需 要向父组件传递。

当然,可以通过event进行传递。但就是因为不想写event,浪费了大量时间 在看wire:model怎么绑定。
 
看了官方的nest-component一章才发现,原来有个#[Modelable]。就是专门用来解决这个问题的。
详细参考:https://livewire.laravel.com/docs/nesting#binding-to-child-data-using-wiremodel
不多说。太长了主要

解决livewire/livewire.js找不到的问题

因为今天用了filamentPHP这个框架,类似 laravel-admin/ dcat-admin等。为什么想用它呢。看官网,插件极其多...

根据官方的教程进行composer require以及publish素材后,本地一切正常,但上线后,报livewire/livewire.js找不到
找了一下根目录,发现确实没有。于是php artisan route:list|grep livewire,看到是由PHP进行模拟的。
 
但因为我用的是lnmp ,默认对JS有一个30d的缓存,所以需要在js的判断前加上
XML/HTML代码
  1. location = /livewire/livewire.js {  
  2.     expires off;  
  3.     try_files $uri $uri/ /index.php?$query_string;  
  4. }:  
不设置过期时间 ,同时是由PHP来解析。reload一下nginx,再次打开网页,一切正常
 
 

Tags: laravel

我一直认为已经没用的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--
Records:64212345678910»