一、config()可以获取到config文件夹下定义的文件当中的值。例如
config下的common.php中:
<?php
return [ 'rel' =>[ '1' => 'default', '2' => 'warning', '3' => 'success' ], ];
//调用
$config=config('common.rel');
//输出
'1' => 'default', '2' => 'warning', '3' => 'success'
注意:在common.php中更改过之后需要在composer执行
php artisan config:cache
作用是清除缓存,这样才可以获取到值,不然的话获取的值为null。
二、通过数据库中已有的数据,运算得到新数据,追加到显示页面。例如已知单价和数量,自动运算出总金额。
controller中
$grid->column('price', __('TaskReleases.Price'));
$grid->column('task_count', __('TaskReleases.Task count'));
//总金额
$grid->column('total_price', __('TaskReleases.Count'));
model 首先要定义追加的字段名,然后设置laravel 获取器
protected $appends = ['total_price'];
//金额自动运算,单价*数量
public function getTotalPriceAttribute(){
return $this->price*$this->task_count;
}
详细讲解:https://www.cnblogs.com/zqblog1314/p/12877152.html
三、多图上传及点击放大功能的实现
上传多图:
添加修改方法:
// 本例中字段是imgurl,所以添加如下代码
$form->multipleImage('imgurl', __('商品图片'));
model
public function setPicturesAttribute($pictures)
{
if (is_array($pictures)) {
$this->attributes['pictures'] = json_encode($pictures);
}
}
public function getPicturesAttribute($pictures)
{
return json_decode($pictures, true);
}
原理为获取器,注意函数名要遵循驼峰式命名,不能出现下划线_
点击放大功能
composer安装扩展
composer require laravel-admin-ext/grid-lightbox
php artisan vendor:publish --tag=laravel-admin-grid-lightbox
配置
打开config/admin.php,将属于此扩展的配置添加到extensions部分。
'extensions' => [ 'grid-lightbox' => [
// Set to `false` if you want to disable this extension
'enable' => true,
] ]
controller中:
$grid->image(__('TaskRecord.Image'))->lightbox(['width' => 50, 'height' => 50]);
四、有表连接时的添加修改或者筛选
form方法:
$type = TaskType::pluck('tname','id');
$form->select('type', __('TaskReleases.Type'))->options($type)->rules('required');
筛选:
$grid->filter(function($filter){
$type = TaskType::pluck('tname','id');
// 在这里添加字段过滤器
$filter->equal('type', __('TaskReleases.Type'))->select($type);
});
五、行操作,添加新的操作按钮
参考 https://laravel-admin.org/docs/zh/1.x/model-grid-custom-actions
Examine.php
namespace App\Admin\Actions\Product;
use Encore\Admin\Actions\RowAction;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
class Examine extends RowAction
{
public $name = '审核';
public function handle(Model $model, Request $request)
{
$model->status = $request->input('status');
$model->reason = $request->input('reason');
$model->statustype = 2;//2为人工审核
$model->update();
return $this->response()->success('审核成功')->refresh();
}
public function form(Model $model)
{
$this->radio('status', '审核')->options([1 => '通过', 2 => '拒绝'])->rules('required');
$this->text('reason', '审核原因')->rules('required');
}
}
TaskReleasesController .php
//首先引用类
use App\Admin\Actions\Product\Examine;
$grid->actions(function ($actions) {
// 通过状态信息添加操作按钮
if(0==$actions->row->status){
$actions->add(new Examine());
}
});
六、回调函数
官方文档 https://laravel-admin.org/docs/zh/1.x/model-form-callback
$form->saved(function (Form $form) {
$code = $form->model()->id;
$now_task=$form->model()->task_count;
DB::table('task_releases')->where('id',$code)->update(['now_task' => $now_task]);
});
七、配置问题
$grid->column('task_demand', __('TaskReleases.Task demand'))->display(function($taskdemand) {
$demand=DB::table("config")->where("group","=","任务要求")->pluck("name","value")->toarray();
$str = '';
if($taskdemand){
foreach($taskdemand as $tid){
$str .=$demand[$tid]." | ";
}
$str = trim($str," | ");
}
return $str;
});
八、DB查询
DB类之查询:
2、满足条件的第一列获取:DB::table("表名")->where("name",">","1")->first();
3、满足条件的全部字段:DB::table("表名")->where("name",">","1")->lists("title");
4、满足条件的单一字段:
DB::table("表名")->where("name",">","1")->pluck("title");//返回二位字段值数组
DB::table("表名")->where("name",">","1")->pluck("title","name");//返回二位字段值数组 第二个参数指定key
5、分块查询数据列:
DB::table("表名")->chunk(100,function($users){
//$users to do $user是table中2行一次查询的结果
//return false; 停止处理接下来的数据
})
6、指定查询字句:DB::table("表名")->select("name","email")->get();
7、增加查询子句到已有查询中:$query=DB::table("表名")->select("name","email");$query->addSelect("age")->get();
8、条件查询where和orWhere:DB::table("表名")->where("name",">","10")->orWhere("titile","=","0")->get();
9、条件查询whereBetween和whereNotBetween:DB::table("表名")->where("name",">","10")->whereBetween("titile","=","[0,10]")->get();
10、条件查询whereIn:DB::table("表名")->where("name",">","10")->whereIn("titile","[1,2,3]")->get();
11、条件查询whereNull:DB::table("表名")->where("name",">","10")->whereNull("titile")->get();//未配置的值
12、条件查询where Clauses:DB::table("表名")->where("name",">","10")->whereNameAndTitle("name",titile")->get();
13、排序(Drder By),分群(Group By)及 Having:$users=DB::table("users")->orderBy("name","desc")->groupBy("count")->having("count",">",100)->get()
14、偏移(Offset)及 限制 (Limit)$users=DB::table("users")->skip(10)->take(5)->get();
九、富文本编辑器
安装参考https://www.cnblogs.com/fogwang/p/11781191.html
富文本使用
$form->ueditor('content', __('ArticleContent.Content'))->rules('required');
detail方法中需要设置禁止转义
官方文档https://laravel-admin.org/docs/zh/2.x/model-show#%E5%86%85%E5%AE%B9%E8%BD%AC%E4%B9%89
$show->field('content', __('ArticleContent.Content'))->unescape();
十、模型表单布局
$form = new Form(new Document);
// 第一列占据1/2的页面宽度
$form->column(1/2, function ($form) {
// 在这一列中加入表单项
$form->text('title', __('Title'))->rules('min:10');
$form->textarea('desc', __('Desc'))->required();
$form->select('uploader_id', __('Uploader'))
->options(User::all()->pluck('name', 'id'))
->rules('required');
;
$form->file('path', __('Path'))->required();
});
// 第二列占据右边1/2的页面宽度
$form->column(1/2, function ($form) {
$form->number('view_count', __('View count'))->default(0);
$form->number('download_count', __('Download count'))->default(0);
$form->number('rate', __('Rate'))->default(0);
$form->radio('privilege', __('Privilege'))
->options(Document::$privileges)
->stacked()
->default(1);
$form->datetimeRange('created_at', 'updated_at');
});
return $form;
十一、laravel-admin图表
安装图表扩展
composer require laravel-admin-ext/chartjs
php artisan vendor:publish --tag=laravel-admin-chartjs
开启扩展位置在 config/admin.php,extensions这一栏
'extensions' => [
'chartjs' => [
// 如果你想关闭的话将true改为false
'enable' => true,
]
]
添加模板文件 resources/views/admin/chartjs.blade.php,内容:
<canvas id="myChart" width="400" height="400"></canvas>
<script>
$(function () {
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes', //数据类型 折线图
type: "line",
data: [12, 19, 3, 5, 2, 3],
backgroundColor:'rgba(54, 162, 235, 0.1)',
borderColor:'rgba(255,99,132,1)',
borderWidth: 1
},{
label: '# of Votes', //数据类型 柱状图
type: "bar",
data: [16, 13, 11, 15, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'red',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: { //显示数值
"animation": {
"duration": 1,
"onComplete": function() {
var chartInstance = this.chart,
ctx = chartInstance.ctx;
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily); //设置字体颜色
ctx.fillStyle = "black";
ctx.textAlign = 'center';
ctx.textBaseline = 'bottom';
this.data.datasets.forEach(function(dataset, i) {
var meta = chartInstance.controller.getDatasetMeta(i);
meta.data.forEach(function(bar, index) {
var data = dataset.data[index];
ctx.fillText(data, bar._model.x, bar._model.y - 5);
});
});
}
},
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
});
</script>
controller,用的时候:
use Encore\Admin\Widgets\Box;
class ChartjsController extends Controller
{
public function index(Content $content)
{
return $content
->header('Chartjs')
->body(new Box('Bar chart', view('admin.chartjs')));
}
}