分类 Laravel 下的文章

转自:https://blog.csdn.net/summerliguilong/article/details/80505573

1. 模块

如果你不是开发一个「玩具项目」。那么,使用模块以及按模块功能进行划分是比较推荐的做法。集中管理模块的实体、控制器、视图、路由、配置等信息。还有啥?以及更方便的在多个应用间进行代码转移。

优势

代码的封装
代码中的顺序
多应用的代码转移
代码生成器 — 模块、控制器、实体类等
详见 Github https://github.com/nWidart/laravel-modules

2. Spatie permissions

如果你不知道 Spatie,你应该开始立刻开始了解他们!伟大的公司。Spaite 的角色和权限包是权限包中最优秀的之一。

优点

角色
权限
直接权限
中间件
丰富的 blade 模板命令
Artisan 命令
哪里获取?https://github.com/spatie/laravel-permission

3. Laravel Datatables

如果你使用 DataTables 并且你在创建你自己的 JavaScript、Ajax、路由、数据库查询、过滤器、搜索等。相信我,这是一个更好的解决方案。

优点

使用简单
DataTable 服务
自定义数据库查询
生成 JavaScript
多重定制
哪里获取?https://github.com/yajra/laravel-datatables

4. 表单构造器

说实话,我不喜欢在 HTML 中混合表单。Laravel 表单构造器能够让你的表单从 HTML 视图中分离出去。

优势

使用简单
表单对象化
支持多个表单字段
支持子表
轻松创建自定义表单字段
详见 Github : https://github.com/kristijanhusak/laravel-form-builder

5. Flash 通知

在保存了表单数据后,我会重定向到列表页,编辑页或者展示页。有了 Flash 通知,我们可以轻松的给到用户成功,警告或者错误的提示。

优势

使用简单
多个参数 (成功,错误,警告, 弹窗,语气等)
自定义视图
详见 Github : https://github.com/laracasts/flash

6. Laravel Menu package

如果你的应用需要很简单方便的根据用户角色或者权限来更改不同的菜单项的话,这个包你可不要错过了。

优势

使用简单
多视图复用
自定义
数据可填充性
可缓存
看这里看这里 https://github.com/spatie/laravel-menu

7. Laravel Activity Log

很多数据管理员都想记录他们用户的所有活跃记录。这个包可以很方便的记录你的用户何时何地的创建、更新实体的记录。外加,现在这个包还可以记录多个版本的实体间数据的变更。

优势

简单的实体实现
记录所有创建、更新实体的用户和次数
支持记录自定义信息(登录、登出等)
戳我呀 https://github.com/spatie/laravel-activitylog

8. Laravel Js Validation

这是我的菜!根据请求的数据对象自动进行前端验证是不是听起来就很赞? 对,没错!我们懒人的目标就是—代码越少越好!

优势

根据请求对象生成前端验证
不需要写任何 Javascript 代码(对,你没听错)
支持异步验证(唯一、是否存在、自定义规则等)
多语言
快点吧 https://github.com/proengsoft/laravel-jsvalidation

9. Persistent settings

如果你的应用包含比较多而且复杂的配置项(主题、logo、公司设置、API 设置、默认设置项等),那这个包就派上用场了。它在数据库中保存一个键值对(key => value)的配置信息,然后你就可以很方便的在应用中用辅助方法使用它们啦!

优势

可缓存
可加密
可上下文的设置项 (用户举例)
哪里获取呢? https://github.com/edvinaskrucas/settings

10. Multi-tenant

在开发 SASS 应用服务是,每个客户都有各自独立的数据库、域名和子域名,并且不会把这些都放到同一个代码仓库里。如果你有类似的需求,此项目既是为你准备的。

功能:

多数据库;
多域名和子域名;
自动生成 Apache 或者 Nginx 配置文件;
支持队列;
支持文件分开存储。
可以从这里获取:https://github.com/hyn/multi-tenant

11. Laravel IDE Helper 

可以让你的 PHPStorm 支持自动补全,支持的类型有 ModelFacade 和数据库实体字段等。
https://github.com/barryvdh/laravel-ide-helper

12. 提供数组、字符串、对象相关的辅助函数:

https://github.com/letsdrink/ouzo-goodies

13. 自动将 PHP 数组转换为 Javascript 对象:

https://packagist.org/packages/laracasts/utilities

web路由设置

Route::group(['prefix' => '/admin', 'as' => 'admin.'], function() {
    Route::group(['prefix' => '/public', 'as' => 'public.'], function() {
        Route::get('', 'TestController@index');
    }
}

获得的路由 / uri信息

$request->decodedPath(); //反回的是路径即uri:admin/public

$request->route()->getName(); //反回的是路由别名:admin.public.index
$request->path(); //反回的是路径即uri:admin/public
$route = Route::getFacadeRoot()->current()->uri(); //反回的是路径即uri:admin/public

Route::currentRouteName(); //反回的是路由别名:admin.public.index
Route::getCurrentRoute()->getActionName(); //返回完整的Action字符:App\Http\Controllers\Manage\PublicController@index

request()->route()->getActionMethod(); //返回: index
$request->route()->getName(); //反回的是路由别名:admin.public.index
request()->route()->getName(); //反回的是路由别名:admin.public.index

能看懂的自然明白,呵呵。

public function getRouteHashId($route){
        $uri = $route->getUri();
        $method = $this->getMethod($route);
        return md5($method.'|'.$uri);
    }

fill 方法是一个只给已有 Eloquent 实例赋值属性的方法,注意是“只给”啊!!

在你调用 fill 方法的时候,Laravel 首先就会去检测当前 Model 的状态!

当你设置了 fillable 数组,没有设置 guarded 数组时,那么此 Model 会处于 仅可批量赋值指定属性 的状态;
当你没有设置 fillable 数组,却设置了 guarded 数组时,那么此 Model 会处于 可批量赋值任何属性 的状态;
至于你同时设置了 fillableguarded 数组的情况就不去讨论了,因为这样做本身就是被 Laravel 所禁止的;

然后调用 fillableFromArray 去获取 attributesfillable 数组的交集,如果你没有定义 fillable 或者禁用掉了守卫,那么此方法会直接返回 attributes然后 Laravel 会对返回的数组做一个循环,在这个循环中 Laravel 会对每一个属性调用 isFillable 方法检测这个属性是否可以被填充,如果没有通过此方法的检测(不存在于fillable 数组中并且没有设置 guarded 数组或存在于 guarded 数组中),那么 Laravel会检测当前 Model 是否处于 仅可批量赋值指定属性 状态,如果是,那么会直接抛出一个 Exception,然后 Laravel 会返回完成赋值操作后的 $this

以上就是 Eloquentfill 方法的源码解析啦~,Laravel 的源码读下来还是很清晰易懂的~,不得不再次佩服 Laravel 的设计,不愧为 巨匠级框架。

转自: https://www.ucloud.cn/yun/26186.html

laravel api的路由里用

auth()->attmpt(['username'=>'username', 'password'=>'password'])

返回 true,但session并没有储存。因为 app\Http\Kernel.php$middlewareGroups 并没有启用

\Illuminate\Session\Middleware\StartSession::class,
这个中间法,这样使得api里的路由无法使用session。解决方法是将 \Illuminate\Session\Middleware\StartSession::class,从 $middlewareGroups 移到 $middleware,这样使得所有路由都可以使用session了,在api路由登录后,在web自然可以用了。

转载:https://www.liaozhiwei.com/post/1574

更新中间表记录

如果你需要在中间表中更新一条已存在的记录,可以使用 updateExistingPivot 。此方法接收中间表的外键与要更新的数据数组进行更新:

$user = App\Models\User::find(1);

$user->roles()->updateExistingPivot($roleId, $attributes);

具体实现步骤

work-with-other-mvc-framework.png

1、网站页面建立与GatewayWorkerwebsocket连接

2、GatewayWorker发现有页面发起连接时,将对应连接的client_id发给网站页面

3、网站页面收到client_id后触发一个ajax请求(假设是bind.php)将client_id发到mvc后端

4、mvc后端bind.php收到client_id后利用GatewayClient调用Gateway::bindUid($client_id, $uid)client_id与当前uid(用户id或者客户端唯一标识)绑定。如果有群组、群发功能,也可以利用Gateway::joinGroup($client_id, $group_id)client_id加入到对应分组

5、页面发起的所有请求都直接post/getmvc框架统一处理,包括发送消息

6、mvc框架处理业务过程中需要向某个uid或者某个群组发送数据时,直接调用GatewayClient的接口Gateway::sendToUid Gateway::sendToGroup 等发送即可

转自:https://workerman.net/doc/gateway-worker/work-with-other-frameworks.html