bpez / infuse
Infuse 是一个用于生成管理风格界面的 Laravel 管理包
Requires
- php: >=5.4.0
- 99designs/phumbor: 1.1.0
- barryvdh/laravel-debugbar: 2.0.5
- bpez/transit: 1.6.*
- intervention/image: 2.1.2
- league/flysystem-aws-s3-v2: ~1.0
- nesbot/carbon: 1.*
- paquettg/php-html-parser: 1.6.3
- toddish/verify: dev-laravel5
Requires (Dev)
- behat/behat: ~3.0@dev
- behat/mink: ~1.7@dev
- behat/mink-extension: ~2.0@dev
- laracasts/behat-laravel-extension: dev-master
- phpspec/phpspec: ~2.1
- phpunit/phpunit: ~4.0
- v5.5.24
- v5.5.23
- v5.5.22
- v5.5.21
- v5.5.20
- v5.5.19
- v5.5.18
- v5.5.17
- v5.5.16
- v5.5.15
- v5.5.14
- v5.5.13
- v5.5.12
- v5.5.10
- v5.5.9
- v5.5.8
- v5.5.7
- v5.5.6
- v5.5.5
- v5.5.4
- v5.5.3
- v5.5.2
- v5.5.1
- v5.5.0
- v5.4.1
- v5.4.0
- v5.3.11
- v5.3.10
- v5.3.9
- v5.3.8
- v5.3.7
- v5.3.6
- v5.3.5
- v5.3.4
- v5.3.3
- v5.3.2
- v5.3.1
- v5.3.0
- v5.2.20
- v5.2.19
- v5.2.18
- v5.2.17
- v5.2.16
- v4.0.0
- v3.4.1
- 2.0.0
- 1.0.0
- dev-develop
- dev-laravel5_1
- dev-version3
This package is not auto-updated.
Last update: 2024-09-28 15:44:30 UTC
README
设置
步骤 1: 将 laravel5 路径仓库添加到 toddish/verify 包
"repositories": [ { "type": "vcs", "url": "https://github.com/industrious-mouse/Verify-L4" } ],
步骤 2: 通过 composer 安装
> composer require bpez/infuse:5.*
步骤 3: 添加 ServiceProvider
// config/app.php 'providers' => [ ... 'Bpez\Infuse\InfuseServiceProvider' , ] ,
步骤 4: 添加到中间件
// app\http\Kernel.php protected $middleware = [ ... 'Bpez\Infuse\Middleware\InfuseBeforeMiddleware', 'Bpez\Infuse\Middleware\InfuseAfterMiddleware' ];
步骤 5: 配置 auth 文件
// config/auth.php ... 'driver' => 'verify', 'model' => 'InfuseUser', ... 'password' => [ 'email' => 'infuse::emails.password', ... ], ...
步骤 6: 发布配置、公共资产并运行迁移
> php artisan vendor:publish --provider="\Bpez\Infuse\InfuseServiceProvider" --tag=infuse_public --force > php artisan vendor:publish --provider="\Bpez\Infuse\InfuseServiceProvider" --tag=infuse_config > php artisan vendor:publish --provider="\Bpez\Infuse\InfuseServiceProvider" --tag=infuse_structure > php artisan migrate --path="vendor/bpez/infuse/migrations"
步骤 7: 添加到 composer.json
"post-update-cmd": [ ... "php artisan vendor:publish --provider="\Bpez\Infuse\InfuseServiceProvider" --tag=infuse_public --force" ],
步骤 8: 添加到 .htaccess
RewriteEngine On
...
RewriteCond %{HTTP:Cookie} devicePixelRatio [NC]
RewriteRule \.(?:jpe?g|gif|png|bmp)$ bpez/infuse/other/retinaimages.php [NC,L]
步骤 9: 运行 infuse 迁移
> php artisan migrate
步骤 10: 添加对服务器视网膜图像的支持
RewriteCond %{HTTP:Cookie} devicePixelRatio [NC]
RewriteRule \.(?:jpe?g|gif|png|bmp)$ /packages/bpez/infuse/retinaimages.php [NC,L]
可能未来的功能
> https://github.com/websoftwares/Throttle
> https://laravel.net.cn/docs/cache
> https://github.com/frenzyapp/turbolinks
> https://github.com/rails/turbolinks
> https://github.com/kossnocorp/jquery.turbolinks
安装强化版的 artisan
> sudo curl https://raw.github.com/villimagg/Artisan-on-Steroids/master/artisan -o /usr/local/bin/artisan && sudo chmod +x /usr/local/bin/artisan
Behat infuse 测试套件
imports:
- vendor/bpez/infuse/behat.yml
高级数据流
model(mapConifig -> getbModelInstance(s) -> boot -> apiCalls) -> process(route -> renderView)
Infuse 配置 API
addSelect
将数据库字段转换为 HTML 表单选择。接受单个实例或多个。
addSelect(array( array( "column" => $columnName, "array" => array(), "insertBlank" => false, "topSelect" => false, "nested" => $nested, "nestedLastArray" => $nestedLastArray ) ), ... );
参数
- column - (必需) [字符串] 数据库表字段名
- array - (必需) [数组] 值数组。格式化
array( array('id' => 1, ", 'name' => 'display name'), array('id' => 2, ", 'name' => 'display name'), ... )
- insertBlank - (可选) [布尔值] 向选择字段插入空白选项。默认值为 false。
- nested - (可选) [数组] 模型仅适用于第一个。之后每一层都需要数组格式
$nested = array( "Floorplan", array("model" => "ImageAsset", "column" => "title") );
- nestedLastArray - (可选) [数组] 层级值数组
$nestedLastArray = array( array('id' => 1, ", 'name' => 'display name'), array('id' => 2, ", 'name' => 'display name'), ... );
describeColumn
向数据库字段添加描述。
describeColumn(array( array( "column" => $columnName, "desc" => "description here", "popover" => true ) ... );
参数
- column - (必需) [字符串] 数据库表字段名
- desc - (必需) [字符串] 描述
- popover (可选) [布尔值] 如果存在选项,则描述以 HTML 弹出显示。
onlyOne
仅允许显示和创建一个数据库条目。
onlyOne();
addPermanentFilters
将 SQL WHERE 子句添加到配置中。
addPermanentFilters(array( array( "column" => $columnName, "operator" => "=", "value" => 87 ) ... );
参数
- column - (必需) [字符串] 数据库表字段名
- operator - (必需) [字符串] SQL 比较运算符。如果使用 'IN' 作为运算符,则使用 elequents whereIn($column, $value)
- value - (必需) [字符串 | 数字] 要比较的值
defaultColumnValues
添加保存条目时的默认值。
defaultColumnValues(array( "column_name_1" => $value1, "column_name_2" => $value2, ... );
参数
- array - (必需) [数组] 默认值数组,其中索引是列名,值是索引的值
addMultiSelect
将字段转换为多选。ID 通过逗号分隔跟踪。
addMultiSelect(array( array( "column" => $columnName, "array" => array(), ), ... );
参数
- column - (必需) [字符串] 数据库表字段名
- array - (必需) [数组] 值数组。格式化
array( array('id' => 1, ", 'name' => 'display name'), array('id' => 2, ", 'name' => 'display name'), ... )
hasMany
在这里定义一对一关系。定义如下格式的子关系。
hasMany(array( array("SomeModelName", "Display Name", array("column_name_1", "column_name2"...) $optionsArray), ... );
参数
- (必需) [字符串] 子模型名称
- (必需) [字符串] 列表在父编辑页面上的条目显示名称
- (必需) [数组] 要在父编辑页面条目上显示的子列
- (可选) [数组] 包含显示子条目的额外功能。一些选项如下
例如:Child Columns 数组可以嵌套数组以匹配如下 id 与值的对应关系
$childColumnArray = array( "column_1", "column_2", array("column_3" => array( array("id" => 1, "name" => "some name"), array("id" => 2, "name" => "some name 2") ), "column_4", ... )
array("category" => $categories)
$optionsArray = array( "order_column" => "display_order", "order_direction" => "ASC", "order_integer" => true )
例如:添加自定义导出和导入功能。
$optionsArray = array( "import_csv_function" => "importUserModelInstancMethod", "import_csv_function_url" => "/path/to/example/template.csv", "import_csv_function_text" => "Import CSV for users. Use template provided.", "export_csv_function" => "exportUserModelInstanceMethod", "export_csv_function_text" => "Export CSV template to import.", )
例如:将表拆分为由 WHERE 子句分隔的 2 个子表。
$optionsArray = array( "split" => array( "Gallery Assets" => "main_gallery = 1", "Gallery 2 Assets" => "main_gallery = 0" ) )
displayOrder
将列更改为用于排序条目的列。整数用于类型。使字段不可由用户编辑,值自动设置。
displayOrder(array("display_order_column"));
参数
- 数据库表字段名
fileUpload
配置文件上传功能列
fileUpload( array( array("column" => "column_name"), ) )
参数
- column - (必需) [字符串] 数据库表字段名
addCkeditor
将文本字段转换为 addCkeditor。
addCkeditor( array("column_name_1", "column_name_2", ...) )
参数
- 数据库表字段名
callFunction
向条目的操作(显示 | 编辑 | 删除 | YourActionHere)中添加额外操作。返回数组("type" => "success", "message" => $message)可以访问通知系统。类型可以是("success" || "error" || "info" || "warning")。或者返回 false 将触发默认错误消息。
callFunction(array( array( "function" => "importSomeThing", "display_name" => "Import some thing", "long_process" => "Processing please wait...", "target" => "_BLANK" ), ... );
参数
- (必需) [字符串] 函数名称。这是一个Laravel Eloquent查询范围。如果名称是importSomeThing,则在模型中声明为scopeImportSomeThing
- (必需) [字符串] 函数的显示名称
- (可选) [字符串] 如果是耗时过程,可以设置一个消息,在过程运行时填充等待模式。
- (可选) [字符串] 为html锚标签提供目标。
例:importSomeThing实现。返回一个包含类型("成功" || "错误")和消息的数组。
public function importSomeThings() { // ... some work here $message = "Thanks"; return array("type" => "success", "message" => $message); }
addOtherAction
在骨架列表页面上的"其他操作"下拉菜单中添加顶级操作。函数应该是顶级模型中的静态函数。将用户实例传递到静态函数中。返回数组("type" => "成功", "message" => $message)可以调用通知系统。类型可以是("成功" || "错误" || "信息" || "警告")。或者返回false将触发默认错误消息。
addOtherAction(array( array( "function" => "seedUrls", "display_name" => "Import some thing", ), ... );
参数
- (必需) [字符串] 函数名称。这是一个Laravel Eloquent查询范围。如果名称是importSomeThing,则在模型中声明为scopeImportSomeThing
- (必需) [字符串] 函数的显示名称
例:seedUrls实现
public function seedUrls($currentUser) { // ... some work here $message = "Thanks"; return array("type" => "success", "message" => $message); }
editListingOrder
允许您选择编辑/创建页面的列排序。传入一个包含所需顺序的列名的数组。
editListingOrder(array( "created_at", "updated_at", "destination_site", "display_state", "property", "mobile_video_img", "sub_title", "video", "title", ));
参数
- (必需) [字符串] 表字段名称
Eloquent ORM
通过扩展InfuseModel并使用InfuseModelLibrary特性来设置模型以与infuse一起工作。
class BlogPost extends InfuseModel { use InfuseModelLibrary; }
InfuseModel特性
url($columnName, $hstoreColumn = false)
获取保存到特定列的文件名的完整URL路径。调用url方法,并传入列名作为参数。
$post = new BlogPost; $post->url($columnName); // Will return a url similar to http://somedomain.com/upload/some/path/name.jpg
thumbor($columnName, $hstoreColumn = false)
基于url功能返回一个Thumbor客户端实例。仅适用于已保存文件的列。Thumbor是一个智能图像服务。它支持图像的按需裁剪、缩放和翻转。Thumbor文档和thumber客户端文档可以在以下位置找到
- https://github.com/thumbor/thumbor/wiki
- https://github.com/99designs/phumbor/blob/master/lib/Thumbor/Url/CommandSet.php
需要服务配置,请参阅以下服务配置进行设置。
$post = new BlogPost; $post->thumbor($columnName)->smartCrop(true)->resize(699, 525); // Will return a url to the cropped or filtered version
- 当与img标签一起使用时,请添加此数据属性:data-no-retina
<?php $post = new BlogPost; ?> <img src="{{$post->thumbor($columnName)->smartCrop(true)->resize(699, 525)}}" data-no-retina />
Bpez\Infuse\Util
Util::thumbor($url)
与InfuseModel url方法相同的功能。用于其他图像资源。
Util::thumbor($url);
- 当与img标签一起使用时,请添加此数据属性:data-no-retina
<?php $post = new BlogPost; ?> <img src="{{Util::thumbor($url)->smartCrop(true)->resize(699, 525)}}" data-no-retina />
Util::cdn($url)
用于通过CloudFront CDN发送同源的资产。需要服务配置,请参阅以下服务配置进行设置。
Util::cdn($url);
服务
/config/services.php
'thumbor' => [ // Thumbor security key here 'security-key' => '843208u4325032u502532582358235', // Use cloudfront in front of thumbor for scalability. 'host' => 'http://d443523423.cloudfront.net', ], 'cloudfront' => [ // Distribution domain for file uploaded through infuse. 's3-uploads' => 'http://d4253425.cloudfront.net', // Distribution domain for assets originating from same origin. 'self-hosted' => 'http://d54343425.cloudfront.net', ],
Retina图像支持
在您的页面上包含Util::infuse()(将其放在模板底部,在关闭标签之前)
{!! Util::infuse() !!} </body> </html>
S3 CORS需要启用,并且需要配置以支持Retina
<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>HEAD</AllowedMethod> <MaxAgeSeconds>3000</MaxAgeSeconds> <AllowedHeader>Authorization</AllowedHeader> </CORSRule> </CORSConfiguration>'self-hosted' => 'http://d54343425.cloudfront.net', ],
待办事项列表
- 将删除添加到infuse删除,然后添加可以用于删除子项的方法
- 在模型库中重新生成generateThumbnail,然后在composer.json中删除
- 替换页面上传功能