1. 如何以fast-cgi的方式运行php
"D:\workspace\php\php-7.2.11-nts-Win32-VC15-x64\php-cgi.exe" -b 127.0.0.1:9000 -c D:\workspace\php\php-7.2.11-nts-Win32-VC15-x64\php.ini

找到你安装的php,将上面引号里面的内容变换为你的php-cgi.exe的位置。注意,如果你的路径中包含空格,必须用双引号引起来。
值得注意的是,fast-cgi模式只适合于开发的时候,由于其经常崩溃的特性,在开发环境中,需要以fpm的模式来安装php,即,在安装php的时候需要安装fpm的扩展,然后配置fpm目录下的php.ini,运行fpm即可。fpm是用于管理fast-cgi的程序,他可以自启fast-cgi进程。

  1. 运行nginx
start nginx

运行之后,修改nginx,然后重启nginx

nginx -s restart/reload
# 通常使用reload,对已开启业务没有影响
  1. laravel报错"Call to a member function requestIsConditional() on null"

在laravel的路由组件中,v1这个版本号写在代码里面,请求的时候并不在url里面。
反正就是url出了问题。核对url与你定义的route是否一致

  1. This action is unauthorized

这个是由Request引起的。生成的request一般有两个函数,authorize和rules。前者用于权限校验,后者用于验证字段。
前者不满足会返回:This action is unauthorized
后者不满足会返回:The given data was invalid.

  1. name()函数

路由名称,方便在代码中对接口进行调用,例如
redirect(route(‘model.list’));

  1. laravel的请求日志

在storage/log下面

  1. 请求过滤中的参数,即request中rules方法

用得比较多的就是 required/nullable 了

  1. 报错 could not find driver

php没有找到数据库扩展
解决方法:
没有正确打开php.ini,原因就是配置错误,或者没找到配置

  1. laravel中直接打开项目

启动:
php artiscan serve
此方法只适合于线下开发,不适合于线上环境。内置webservice,不适合于生产环境

  1. Column not found: 1054 Unknown column ‘xxx.id’ in 'where clause

调用find()方法的时候出现这个,需要在Model里面指定$primaryKey

  1. redis启动指定配置文件

linux:./redis-server /opt/redis-3.2.3/redis.conf &
win10:redis-server redis.windows.conf

  1. 加入外部sdk后,加载进框架

composer dump-autoload

  1. 加入外部sdk
以阿里云的sdk为例,将阿里云的sdk放入到bootstrap目录下,然后找到Config.php,再在composer.json中的autoload中加入Config.php的路径。然后使用composer dump-autoload,加载完毕之后就可以进行使用了。

laravel 开发部署88问_php

  1. laravel连接redis出现"​​SELECT​​ failed: NOAUTH Authentication required.异常

redis密码的配置出错。要么是redis的问题,密码requirepass没有设置,或者没有设置以配置文件的方式打开redis。要么是项目的问题。

  1. 加斜杠和不加斜杠的区别

命名空间的问题

  1. redis获取ttl

$redis = app(‘redis.connection’);
$redis->ttl(‘key’);

  1. 报错 Call to undefined function curl_init()

打开php的curl扩展

  1. laravel 数据库迁移时,时间设置默认值

$table->timestamp(‘time’)->default(\DB::raw(‘CURRENT_TIMESTAMP’));

  1. Base table or view not found: 1146 Table ‘dhi_dev.posts’ doesn’t exist

表不存在

  1. 引入jwt后报错:Non-static method Tymon\JWTAuth\JWTAuth::attempt() should not be called statically

改成 use Tymon\JWTAuth\Facades\JWTAuth;

  1. Class Tymon\JWTAuth\Providers\JWT\NamshiAdapter does not exist

find you jwt.php of config file, update three part
‘jwt’ => ‘Tymon\JWTAuth\Providers\JWT\Namshi’,
‘auth’ => ‘Tymon\JWTAuth\Providers\Auth\Illuminate’,
‘storage’ => ‘Tymon\JWTAuth\Providers\Storage\Illuminate’
i have fixed it and it worked

  1. jwt配置

config里面的jwt.php和auth.php

  1. trait
  2. jwt:Undefined index: password
$credentials = [
'user_name' => $request['userName'],
'password' => $request['password']
];
$token = auth('api')->attempt($credentials);

user_name和password这两个字段是获取token的必要字段,必须要填写

  1. Lumen

一个基于laravel的框架

  1. 打印调式结果

dd()

  1. auth.php中配置的provider是啥

契约,也就是默认方法的意思

  1. 新增字段迁移

php artisan make:migration add_remember_token_to_user_infos__table --table=user_infos
迁移 php artisan migrate

  1. Eloquent 模型和 Laravel 查询构造器的 database,有什么区别

前者是laravel提供的ORM框架

  1. auth(‘api’)->attempt 验证的是哪几个字段

验证的传入字段。如果一直返回false,请确定,password字段是一定要有的,同时,password在存入的时候,一定要调用
配置的加密算法进行加密,因为attempt算法会对密码进行加密然后再进行比较。
Hash::make()

  1. laravel 命令行调试器
  2. 解析token

auth(‘api’)->user()

  1. 统一验证jwt

在App/http/kernel.php中添加
‘api’ => [
‘throttle:60,1’,
‘bindings’,
‘jwt.auth’ => ‘Tymon\JWTAuth\Middleware\GetUserFromToken’,
],
然后在route的api.php中放入
function ($api) {
$api->group([
‘middleware’ => [‘api.throttle’,‘jwt.auth’],
‘limit’ => config(‘api.rate_limits.access.limit’),
‘expires’ => config(‘api.rate_limits.access.expires’),
]
即,加入jwt.auth

  1. 生成request

php artisan make:request xxxxx

  1. like语句的写法
Drug::where($data)
->where('drug_name','like','%'.$request['query'].'%');
  1. laravel如何上传图片

public 磁盘适用于要公开访问的文件。默认情况下,public 磁盘使用 local 驱动,
并且将这些文件存储在 storage/app/public 目录下。
为了使它们能通过网络访问,你需要创建 public/storage 到 storage/app/public 的符号链接
你可以使用 Artisan 命令 storage:link 来创建符号链接:
php artisan storage:link
注意部署的时候应该重新建立符号链接,也就是删除重新弄

  1. 如何打开laravel-admin

php artisan vendor:publish --provider=“Encore\Admin\AdminServiceProvider”
修改config/admin.php里面的内容
php artisan admin:install

  1. $request->except

如果需要检索输入数据的子集,则可以使用only和except方法。
这两种方法都接受单个array或动态参数列表

  1. 获得当前的时间

‘create_datetime’=>Carbon::now()

  1. 如何在显示用户的时候展示图片

$grid->occupation_image(‘Occupation image’)->image(route(‘admin.index’));

  1. laravel-admin点击edit会跳转到http://0.0.0.8/edit

如果是默认页面,点击edit会出现问题,如果不是默认页面,则不会出现问题。

  1. laravel-admin detail 如果是boolean类型,update不生效
  2. laravel-admin如何进行部署

部署的时候直接挂上去即可,不需要考虑重新发布一次
但是数据库如何确认呢?

  1. ubuntu安装redis

sudo apt-get install redis-server

  1. redis相关

配置文件打开requirepass
关闭redis redis-cli shutdown

  1. 迁移回滚

回滚上一次的迁移
php artisan migrate:rollback
回滚所有迁移
php artisan migrate:reset
回滚所有迁移并且再执行一次
php artisan migrate:refresh
php artisan migrate:refresh --seed

  1. laravel-admin部署在ubuntu上面

php artisan migrate 直接迁移即可
生产环境中,admin_users里面没有默认的用户,需要修改seeds目录下面的
DatabaseSeeder。在代码中加入
$this->call(\Encore\Admin\Auth\Database\AdminTablesSeeder::class);
然后执行php artisan db:seed就有数据了

  1. nginx配置之后不生效

不同nginx的版本,配置方法不一样。我windows的版本,nginx可以通过不同的域名监听不同的端口,直接配置即可。线上的ubuntu版本,只能监听相同的端口。
造成这个的原因是没有配置一个”Catch All”的缺省server
加一条默认的阻挡。
当所有server的规则都不匹配时,
nginx会采用第一条server配置,所以一般第一条server会使用阻止页面
server {
listen 80;
server_name _;
return 404;
}

  1. nginx反向代理未生效

proxy_pass
端口都使用80,然后nginx 直接通过域名自己进行区分
这里的原因是不同版本的nginx配置不一样引起的,我win10本地的nginx就可以通过不同的端口
对不同的域名进行直接绑定,而线上版本的nginx只有通过一个端口进行反向代理。

  1. nginx 限制ip访问次数

nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同
一时间段的访问次数来防cc攻击。HttpLimitReqModul用来限制连单位时间内
连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。
一旦并发连接超过指定数量,就会返回503错误。HttpLimitConnModul用来限
制单个ip的并发连接数,使用limit_zone和limit_conn指令这两个模块的区别
前一个是对一段时间内的连接数限制,后者是对同一时刻的连接数限制。
limit_req zone=allips burst=5 nodelay;

  1. 项目上传到服务器中之后,不能正常显示图片

似乎是权限的问题,所有者是www-data
ubuntu 更改文件所有者,修改了权限依旧有问题
可能是没有建立得起软连接的缘故,删除public的storage目录,重新建立符号链接
php artisan storage:link

  1. laravel-admin 图片点击放大

这个应该可以自己写js控制的吧,Admin::script(),你的js代码

  1. laravel-admin tinyint类型不嫩正常显示

用display函数,实现闭包

  1. ubuntu本地操作redis

进入redis:redis-cli
密码验证: auth DHI123dhi
选择数据库:select 4
查看键:keys *
获取值:get user:registerxxxx89@qq.com
获取ttl:ttl user:findxxxx9@qq.com

  1. laravel-admin 将数字转换为中文输出
//列表页grid
$grid->column('role_id','角色')->display(function ($role_id){
if ($role_id==1){
return 'xxx';
}elseif ($role_id==2){
return 'yyy';
}elseif ($role_id==3){
return 'zzz';
}elseif ($role_id==4){
return 'kkk';
}
});
//详情页show
$show->role_id('Role')->as(function ($role_id){
if ($role_id==1){
return 'xxx';
}elseif ($role_id==2){
return 'yyy';
}elseif ($role_id==3){
return 'zzz';
}elseif ($role_id==4){
return 'kkk';
}
});
  1. ->editable(‘select’, [1 => ‘通过’, 2 => ‘不通过’])会导致前面的内容不可见
  2. grid列表里面可以是自定义列,出现了302found

数据库更新错误,问题是字段名写错了

  1. laravel-admin _method

_method的方法才是真正请求的方法

  1. form对象指示的是表单的类型
//单项选择
$form->radio('role_id','Role')->options([1=>'普通用户',2=>'护士',3=>'医生',4=>'研究员']);
  1. 重定向,列表结果未刷新

目前只能手动刷新

  1. 获取对象的成员变量

->变量名

  1. 获取数组的长度

sizeof

  1. 获取id的时候,route中定义的名字应该与$request中获取的一致
  2. laravel or语句
if (!empty($keyword)) {
$goodsModel = $goodsModel->where(function ($query) use ($keyword) {
$query->where('name', 'like', "%{$keyword}%")->orWhere('barcode', 'like', "%{$keyword}%");
});
}
//或者
if (!empty($keyword)) {
$keyword = "%{$keyword}%";
$goodsModel = $goodsModel->whereRaw('(name like ? or barcode like ?)', [$keyword, $keyword]);
}
  1. laravel left join
FormulaHerb::leftJoin('herbs',function ($json){
$json->on('formula_herbs.herb_id','=','herbs.herb_id');
})->where(['formula_herbs.delete_mark'=>0])
->where('formula_herbs.formula_name','like','%'.$request['keyword'].'%')
->where('formula_herbs.role_codes','like','%'.$roleId.'%')
->limit(10)->get();
  1. php for循环
foreach ($companyQualifications  as $companyQualification){
$item = [
'qualificationTitle'=>$companyQualification['qualification_title'],
'qualificationDetail'=>$companyQualification['qualification_detail']
];
$data[$i] = $item;
$i ++;
}
  1. php set集合
$x=collect();
$x->push();
$x->contains();
  1. laravel 修改中间件返回结果

jwt.auth 中间件 代码在哪

  1. laravel 框架修改默认的异常status_code

在config/api.php下面有这一段代码
‘errorFormat’ => [
‘message’ => ‘:message’,
‘errors’ => ‘:errors’,
‘code’ => ‘:code’,
‘status_code’ => ‘:status_code’,
‘debug’ => ‘:debug’,
],
也可以使用中间件进行修改

  1. laravel errorFormat 指定status_code
//Dingo api的Exception handler
protected function getExceptionStatusCode(Exception $exception, $defaultStatusCode = 500)
{
return ($exception instanceof HttpExceptionInterface) ? $exception->getStatusCode() : $defaultStatusCode;
}
  1. 创建exception
use Exception; //这个exception是主框架里面的 
if ($response = $handler($exception)) {
if (! $response instanceof BaseResponse) {
$response = new Response($response, $this->getExceptionStatusCode($exception));
}
return $response;
}
  1. Laravel 中的模型事件与 Observer

观察者模式,监听多个事件

  1. 打印出中间结果
print_r('user:change' . $request['email']);
  1. laravel邮件模板,利用的是调用api的方式
<div style="margin:0;padding:0;background:#eee">
<table border="0" cellspacing="0" cellpadding="0" align="center" style="width:640px;padding-left:20px;padding-right:20px;border-collapse:separate">
<tbody>
<tr>
<td style="height:20px">
<div style="min-height:20px;min-height:20px;max-height:20px;vertical-align:top;overflow:hidden">
</div>
</td>
</tr>
<tr>
<td style="background-color:#ffffff;border-radius:6px;padding:40px" span="">
<p style="margin:0 0 30px 0">
中西药相互作用查询系统:<br><br><span class="il">您正在尝试修改账户</span><span class="il" style="font-weight: bold"> chaojilaji@outlook.com </span>的密码。你的验证码为
</p>
<p style="display:inline-block;width:100%;background-color:#eaf3ff;text-decoration:none;color:#5486c6;font-size:18px;font-weight:bold;text-align:center;padding:15px 0px 15px 0px;border-radius:2px">
123456
</p>
<p style="margin:30px 0 0 0">如果您并未提交过此请求,请忽略此邮件。</p>

</td>
</tr>
<tr>
<td height="18"></td>
</tr>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0" align="center" width="100%" style="padding-bottom:10px">
<tbody>
<tr>
<td valign="top" width="127"></td>
<td valign="top" align="right" width="*" style="font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:11px;line-height:15px;color:#9d9d9d"></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
  1. 去掉表单脚部查看继续创建继续编辑
$form->footer(function ($footer) {

// 去掉`重置`按钮
$footer->disableReset();

// 去掉`提交`按钮
$footer->disableSubmit();

// 去掉`查看`checkbox
$footer->disableViewCheck();

// 去掉`继续编辑`checkbox
$footer->disableEditingCheck();

// 去掉`继续创建`checkbox
$footer->disableCreatingCheck();
  1. laravel admin 排序desc
$grid->create_datetime('Create datetime')->sortable();
  1. 下拉框直接保存
$grid->column('status1','审核')->select([
0 => '不通过',
1 => '通过',
]);

填默认值
闭包解决
闭包就是参数流动,只在里面流动

  1. laravel-admin文档
    ​laravel-admin文档​
  2. laravel-admin disabled的字段,在update的时候是不会传输的
  3. laravel-admin grid里面去掉新增按钮,增加导入按钮
$grid->tools(function (Grid\Tools $tools){
$tools->disableBatchActions();
$tools->disableFilterButton();
});
应该是grid里面的方法
禁用创建按钮
$grid->disableCreateButton();
禁用分页条
$grid->disablePagination();
禁用查询过滤器
$grid->disableFilter();
禁用导出数据按钮
$grid->disableExport();
禁用行选择checkbox
$grid->disableRowSelector();
禁用行操作列
$grid->disableActions();
禁用行选择器
$grid->disableColumnSelector();
设置分页选择器选项
$grid->perPages([10, 20, 30, 40, 50]);
  1. laravel-admin 如何建立url与方法的对应关系

看他是怎么请求的,然后根据这个请求建立Controller即可

  1. laravel国际化 (html)

在resource/lang下面有很多语言
项目使用的默认语言是在 config/app.php 配置文件里设定的,你可以按照实际需要修改它。
‘locale’ => ‘zh-CN’,
App::setLocale($locale); 动态设置语言环境

  1. laravel国际化 (api)

利用中间件做统一处理

  1. laravel 获取header
$request->header('xxxxx');
  1. 创建中间件和使用流程

​https://learnku.com/laravel/wikis/25575​​​ laravel里面的中间件就是java里面的拦截器,既可以拦截请求,也可以拦截结果
php artisan make:middleware LanguageMessenger
修改代码,前置,就动$request,后置就动 $response
$response = n e x t ( next( next(request);
注册中间件:
修改app/Http/Kernel.php,加入新建的中间件即可

  1. 判断属性是否存在

property_exists

  1. 中间件拦截并使用response
//获取content
$data = $next($request);
$content = $data->getOriginalContent();
//修改content:重新传一个response即可
return response()->json($content)->header('lang',$lang);
  1. php数组,如何确定变量在数组中
key_exists("Toyota", $a)