抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

这个以前应该是遇到过,不过很久不用都忘记了.这次就记录下吧.免得以后没处查去. 原因很简单 当双重循环 volist 的时候, 如果做两重循环的判断.这是就不能用简写的 $vo.id 这种形式了 必须用数组的形式 $vo['id']这样就ok了 12345678910111213141516<select class="lay-search" nam...

12345$cache = new \Think\Cache;//第一个参数为 缓存类型 这里是从配置里读取 第二个参数为清理的文件夹 因为默认清理的是 Temp 这里修改成Cacheecho $cache->getInstance(C('DATA_CACHE_TYPE'), ['temp'=>CACHE_PATH])->clear...

在做微信支付的过程中,微信支付可以实现,然后微信退款总是出现错误代码:52。最后发现证书路径为相对路径。 解决方法:扎到文件Wxpay.api.php。在该文件中找到 “postXmlCurl”这个方法,然后将证书路径修改为绝对路径即可。 下面说明修改内容:将证书路径替换为绝对路径: 123//使用证书:cert 与 key 分别属于两个.pem文件 curl_setopt($ch...

mysql有很多关于时间截取的方法,不过呢数据格式必须date形式的,不过我现在用的int保存时间戳的方式.以前记得好像date形式有什么缺点 现在给忘记了 以后遇到再记录下吧. 函数类似这种 这次是没法测试 以后数据库可以参考下 好像这种更优化一些 1SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 5 DAY) AS SubtractDate FROM...

今天用到Carbon这个时间类,不过TP3.2不使用 composer 所以加载起来比较费劲.按官方说法放在 /thinkphp/Library 下的都可以自动加载.其实呢,需要命名空间与目录一致,而且文件名必须是 *.class.php 这大多数第三方库是满足不了的所以只好手动加载了 12345678910111213141516171819202122232425262728293031...

目录结构

F:.
│ Power.php
│ Superman.php

└─IoC
Power.php

Superman.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
namespace IoC;
//use Power\Power; //定义了命名空间也需要引入???? 不能用use自动加载?
//已经确定了 必须的引入 框架里都是使用了自动加载程序 所以无需引用
//比如composer
//include_once 'Power.php';

//两点需要注意的
//一 autoload不能在有命名空间下使用
//二 函数是不能再类里面写的 要么写在之前 要么写在方法里
//spl_autoload_register现在建议用这个函数 不建议使用__autoload了 好像7.2就要把他删掉了
//这两个存在哪一个都可以
//不过这是加载相同命名空间下的文件
spl_autoload_register(function($class){
if($class){
$file = $class.'.php';
if(file_exists($file)){
include_once $file;
}
}
});

class Superman{
protected $power;

public function __construct()
{
// spl_autoload_register(function($class){
// if($class){
// $file = $class.'.php';
// if(file_exists($file)){
// include_once $file;
// }
// }
// });
//所以这个是IoC/下的Power 而不是和Superman同目录下的Power 因注册的是相同命名空间IoC下的文件
$this->power = new Power(999,100);
}


// public function makeNew(){
// $this->power = new Power(999,100);
// }

public function getPower(){
//var_dump($this->power);
return $this->power;
}


}


//明白了这个函数链是怎么回事了
$man = new Superman;
echo $man->getPower()->getAbility();
echo "<br>";
//这个class的用法 必须没经过实例化的类 经过实例化的类是动态的会报错
echo Power::class;

这里总结了一些开发前后端分离,对于开发API的管理.不仅可以在没有后端搭建成的时候mock数据.而且可以管理接口及版本,并生成文档.这为开发及后续整理提供很大的方便. 网站 具有的特色 DOClever 这个平台有很好的介绍用的都是视频真是太贴心了教程.而且可以管理团队,项目分配,模拟数据,测试接口,版本管理.真的是功能十分丰富,这个也可以导入Swagger,只要导出json文件...

名称 说明 laravel/lumen 这是我目前在研究和用的 laravel擅长主流网站 lumen是微框架适合做API后台 Swoole C扩展实现的PHP异步并行网络通信框架,可以重新定义PHP。过去PHP只能做Web项目,现在有了Swoole。任意服务器端程序都可以用PHP来写。 workerman 类似swoole,不过是纯PHP实现的,官网有很多示例项目。底层...

Notadd官方文档git仓库模块的安装插件安装 理念不错的,不过现在还是测试版.问题多多啊.git上的下载下来无法安装.等以后版本成熟的时候再看一下吧

时间紧迫先简单说明下

服务提供者: 是绑定服务到容器的工具.

容器: 是laravel装载服务提供者提供的服务实例的集合或对象

门面: 使用这些服务的快捷方式.也就是静态方法.

注意: 如果一个类没有基于任何接口那么就没有必要将其绑定到容器。容器并不需要被告知如何构建对象,因为它会使用 PHP 的反射服务自动解析出具体的对象。(?后面这个明白意思,但不知道怎么做)

客户端 token 只存简单的数据,如 userId 。永不过期,除非服务端返回 403 状态码。 当 token 进来时,校验,解析出 userId ,从缓存(如 redis )获得 userData ,若缓存存在,更新过期时间。 若缓存没有命中,从数据库加载返回同时存入缓存,设置过期时间。 基于安全考虑,可在 token 中再加入一个 version 字段,在第 2 步时校验该...

Route::auth(); 5.2新加的用于生成auth路由

Auth::guard($guard) 试图从本地缓存中获取保护 官方直译是这么写的 但还是不明白啥意思 而且这也是5.2新加的
有点懂这个guard了 主要用这个机制应对同一应用不同登录验证 比如前台用户登录和后台管理员登录 就可以放在两个表里然后配置不同的guard

5.2和5.1的Auth部分变化很大,两个config/auth.php配置就有很大区别

5.2把单独Auth/Guard 类 拆成了三个,SessionGuard和TokenGuard,GuardHelpers.
GuardHelpers主要是共有方法,另外两个是根据不同驱动,也就是登录信息保存方法.
同时也就是根据pc和移动的登录验证分成了两个类.


laravel是区分大小写的,即使在windows下如果url路径写错(大小写不一致),也会造成找不到页面错误

TaskRepository 分担查询数据库内容的工作 其实放到model也可以 不过这样解耦 以后方便改吧

1
2
3
4
5
6
7
RouteServiceProvider --> $router->model('task','App\Task'); #路由绑定模型 还得需要前边 路由的配合
Route::delete('tasks/{task}','TaskController@destroy'); #再说明一次 task是指第一个参数 也就是起得名字

AuthServiceProvider --> protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
'App\Task' => 'App\Policies\TaskPolicy',
];

关联策略的 策略是用于检查是否有权限进行这个操作

1
2
3
4
public function destroy(User $user, Task $task)
{
return $user->id === $task->user_id;
}
1
$this->authorize('destroy',$task);

调用策略验证 同名功能 其实可以不用第一个参数

默认策略必须在AuthServiceProvider这个支持者里进行设定才能应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php

namespace App\Providers;

use App\Post;
use App\Policies\PostPolicy;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*应用策略映射
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
//放在这里直接映射了 下面就不用在boot里挨个写了 那样太凌乱了
Post::class=>PostPolicy::class,
];

/**
* Register any application authentication / authorization services.
*
* @param \Illuminate\Contracts\Auth\Access\Gate $gate
* @return void
*/
public function boot(GateContract $gate)
{
parent::registerPolicies($gate);

//定义权限
$gate->define('update-post',function($user,$post){
return $user->id === $post->user_id;
});
//也可以这么写
//$gate->define('update-post', 'PostPolicy@update');
}

类是什么类是抽象的一个定义,只是定义不能用.class.php 12345678910111213141516171819202122232425262728293031323334353637383940<?php //枪的类class gun{ // 弹匣不同的枪有不同弹匣和装弹数量 protected $magazine =''; ...

代码片段 1234567891011121314/*@ 计算php程序运行时间*/function microtime_float(){list($usec, $sec) = explode(” “, microtime());return ((float)$usec + (float)$sec);}//开始计时,放在头部$starttime = microtime_fl...

1234567891011121314151617// 使用 Cache::remember 缓存结果是个不错的选择,能大大优化访问速度 $cid = '分类ID'; $cat = Cache::remember('cat-' . $cid, Carbon::now()->addMinutes(60), function () use...

在nginx下多个php版本的时候,需要启动两个php-fpm,在配置时php7把当前服务的配置放在了usr/local/etc/php-fpm.d/下了,默认里面有个default,不过需要改成 www.conf 否则就会出现下面那个错误. 3.WARNING: Nothing matches the include pattern ‘/usr/local/etc/php-fpm.d/*...

简介在装lumen时突然出现了这个错误,主要是因为多个版本php共存,新装的php7配置php.ini时,没有把*.default_socket设置上而造成无法连接数据库的问题. 解决 首先说明这个是在使用nginx时,必须使用php-fpm时出现的. 现在找到 socket 的位置. 使用命令 ps aux | grep -i mysql 看到如下结果 mysql 12388 ...

swoole, C扩展实现的PHP异步并行网络通信框架,可以重新定义PHP。过去PHP只能做Web项目,现在有了Swoole。任意服务器端程序都可以用PHP来写。swoole_framework,基于swoole扩展开发的一个开发框架php-webim,基于swoole实现的Web即时聊天工具,支持websocket+http comet长链接推送,可以发送文字内容和图片workerman...

自 PHP 5.5 起,关键词 class 也可用于类名的解析。使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称。这对使用了 命名空间 的类尤其有用。 123456789101112131415namespace App\Http\Controllers\Api\V1;use ApiDemo\Repositories\Contra...

抽象类(abstract),一般用于基类,所有的公共方法都可以放在里面,抽象类是不能被实例化的,只能被继承.而且抽象方法是必须被重写的,其他可以根据需要选择.这样你可以简单只写一个抽象方法,其他方法大家都有了,省着写了.

以下是官方说法

PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

前言 一般情况下是不会有问题的,类似这样 bootstrap/css/bootstrap.min.css 或者 /bootstrap/css/bootstrap.min.css,当网站使用域名的时候后者不会出错,可是当使用本地测试时,是在http://localhost/Admin/public/admin/这样一个路径,就会出现加载位置出错. 说明 解决方法有几个 (没办法只能这么写,...

php下载时不想让别人看到真实的下载地址?怎样隐藏下载文件的真实地址?首先要取得下载文件的URL,这里假设你通过PHP的操作取得文件的URL地址,变量为$URL代码如下: 123456$file_size = filesize($url); header("Content-type: application/octet-stream"); header("Acc...

:分割 要传递给中间件的参数,多个参数用,分割

前言

从这里开始

1
2
3
4
5
6
  public function __call($method, $parameters)
{
//这里注意 $this->guard() 返回的是个实例,call_user_func_array()第一个参数如果是类,
//则需要数组第一个是类的实例变量
return call_user_func_array([$this->guard(), $method], $parameters);
}

简介

phpize是什么?
phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块
比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpizen
安装PHP的模块一个方式是加上相关参数重新编译PHP一个是用到phpize,比如eaccelerator,memcache等,这个比较方便,不用重新编译PHP,也可以随时启用或停用
phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块.

简介 这两个模块附带函数都是对多进程任务开的. 而且这两个模块好像只能在linux下安装,windows下是不支持的. 参考文档php的POSIX 函数以及进程测试的深入分析centos安装php-posixPOSIX 官方文档 PHP的pcntl多进程基于PCNTL的PHP并发编程进程控制 官方文档

简介PECL 的全称是 The PHP Extension Community Library ,是一个开放的并通过 PEAR(PHP Extension and Application Repository,PHP 扩展和应用仓库)打包格式来打包安装的 PHP 扩展库仓库。通过 PEAR 的 Package Manager 的安装管理方式,可以对 PECL 模块进行下载和安装。与以往的多数...

前言

Event事件总是晕晕的,反复看了几遍,终于纠正了我的惯性思维,我一直认为监听类是起到监听作用.其实错了,事件类是相当于触发,监听某个动作.而监听类是响应这个动作的具体操作.从另一个方面讲,监听类其实监听的是事件类的触发.这下就清晰点了.下面把整个事件所需要的文件都简单说明下.

简要说明

laravel事件的主要文件

  1. Event.php (创建事件类,这个文件最主要的作用就是注入,其他的功能暂时没发现)
  2. Listener.php (创建监听类,这个文件的主要作用就是响应事件类,当事件触发了进行响应操作)
  3. EventServiceProvider.php (关联事件与监听的文件)

前言

也是发现了两个插件,rap2hpoutre/laravel-log-viewerARCANEDEV/LogViewer.第一个简单些,界面显示也简单些.第二个丰富些,不过第二个测试时不好使,可能是因为我装了两个有点冲突吧.

前言

发现两个不错的语音包,caouecs/Laravel-lang和overtrue/laravel-lang.第一个是第二个的基础,只是做了一下自动化

caouecs/Laravel-lang

其实使用很简单,就如下所说,把项目下载到项目里,然后把要使用的语言包,放到resources\lang里,然后改写config\app.php里的语言设置就ok了

前言

还不错的插件,减少了开发面包屑功能的麻烦,不过还得自定义个文件,每个route都得写上下关系才行.还是不能特别便利,不过有总比没有好.

使用方法

  • 安装

    1
    $ composer require davejamesmiller/laravel-breadcrumbs

前言总结一下好用的插件,省着忘记. 好用插件Api响应格式插件laravel5-fractalFractal官方网站 权限管理插件zizaco/entrust 面包屑插件davejamesmiller/laravel-breadcrumbs 提示翻译插件caouecs/laravel-lang 日志统计后台arcanedev/log-viewer 日志显示 和上面那个差不多 不过不用后台配...

前言

最近需要做后台所以找到这个插件.下面的文章内容稍微有点老,但大致讲解的没问题,还是结合项目仓库一起看就明白很多了.

简单说明

针对那篇文章没有提到的东西简单说明下

  • 注意引入文件,升级后很多名称变了,所以一定要参考文档.

一些私有属性说明 123456789101112131415161718//注册成功后挑战地址protected $redirectPath = '/';//登录成功后跳转地址protected $loginPath = '/';//但是有个问题当登录成功后 还是进入auth/login的时候 还是会默认跳转到/home路径下//重置密码后跳转路径pr...

模型类一些私有属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//指定表名  
protected $table = 'my_flights';

//这个限制只决定怎么插入到数据库 不决定怎么取出数据
protected $dateFormat = 'Y-m-d';

//白名单 可以直接创建数据的字段
protected $fillable = ['title','intro','content','published_at'];

//黑名单 除此之外的字段都可以直接创建
protected $guarded = ['created_at','updated_at'];

//设置字段为Carbon实例 可以直接使用Carbon方法
protected $dates = ['published_at'];

//属性转换类型 key是字段名称 value是要转换成的类型
protected $casts = ['is_admin' => 'boolean',];

//数组转换 把数组转化成JSON格式存入数据库 读取时自动转化成数组
protected $casts = ['options' => 'array', ];

//隐藏模型的一些属性 直接输出的时候是无法看见的
protected $hidden = ['password'];

//显示白名单 那些字段直接输出是可以被看到的
protected $visible = ['first_name', 'last_name'];

//追加字段到返回数组中 而且是数据库没有的字段 而且需要访问器的帮忙
//但这个不理解有什么用处 他其实是通过已有字段经过判断后输出 两个字段都能返回 只不过这个返回是布尔值
protected $appends = ['is_admin'];

第一步 安装composer 从这里 https://getcomposer.org/download/ 后直接安装即可 切记需先安装php 并且版本支持做开发项目 第二步 配置composer镜像仓库composer config -g repo.packagist composer https://packagist.phpcomposer.com输入这行代码即可 你可以在任意位置打开命...

###用composer建立项目
莫名其妙的5.1.11的库文件少了 vendor 这个目录所以拿composer无法创建了 只好创建5.2 或者下载一键安装包

1
composer create-project laravel/laravel myapp --prefer-dist

###配置项目环境

  • 配置数据连接
    打开.env文件进行配置 (这个必须先行配置 要不下面插件安装会提示错误) 还有就是config里的database.php的配置文件一般是用于多数据库连接时在里面进行修改
  • 初始化composer
    在配置里搜索composer然后把 composer.phar地址填写进去 没有的话 就按照提示下载一个或者安装一下 (C:\ProgramData\ComposerSetup\bin\composer.phar 这是我的位置仅供参考)然后点确定初始化完成
  • 配置Command Line Tool Support
    1 点击添加 选择Tool based on Symfony Console 确定
    2 起一个别名 然后添加脚本地址 也就是artisan所在位置 如果php.exe不在运行环境里 那也得选择地址
    3 完成后可以点编辑选择是当前项目下使用 还是全局使用(上次我是选择当期项目下 这次新建立项目就又装了一遍 这次我选全局了 看看下次开项目是不是还用再装一遍 已经正事了是全局的 第二次不用配置了 看来我又错了 虽然为全局的不用安装 但是命令还在那个命名空间 所以生成的文件还在老的项目里 而不能生成在新的项目所以没用)
    4 配置文件可以复制进去 但是必须替换里面的项目名 要不会报错
    ##注意
    Command Line Tool Support 在laravel 5.2里配置artisan会报错 具体原因不明 也许是我的phpstorm版本的问题 我这个一直没升级 还是10.0.1 其实命令是好使的在cmd里 只不过还得输入那么多 所以项目降级到laravel 5.1了 这次遇到的麻烦太多了 5.1还不能用composer生成线上的库不知道什么问题缺少vendor 所以只能用一键安装包来新建项目 而且5.2插件支持也变了所以原本打算用5.2最后也是放弃了

前言

接口一直让我很晕,下面这篇文章有了很好的说明.
现代 PHP 新特性系列(二) —— 善用接口
这里我就再简单化下,以便我能快速记忆.


简要说明

接口说直观点就是模具,或者说API

  • API说
    说他像API,是因为他提出来所有功能.你知道接口有什么,你就知道你能做什么了

  • 模具说
    说他像模具,是因为接口的功能是统一的,一致的.但是实现的方法可以不同.就像你做一个花瓶的模具,但是根据填充的材料不同,可以做出不同的花瓶.什么玻璃的,陶瓷的,珐琅的.虽然他们长的都一个样.

接口的作用

所以接口的作用,就是解耦.

比如一个DB类流程:

  • DB操作类,根据DB接口提供的功能,进行具体功能开发.
  • DB实例化的时候,必须传入符合DB接口的DB驱动类.(符合接口保证功能可用,而且不符合接口也会报错)
  • DB操作类,根据传入不同DB驱动实例,达到解耦的作用.(因为功能名称都是统一的)

启动流程

###参考 artisan make:model 而写的 make:view 新建blade模版

  • MakeView.php

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    <?php

    namespace App\Console\Commands;

    use Illuminate\Console\Command;
    use Illuminate\Filesystem\Filesystem;

    class MakeView extends Command
    {
    /**
    * The name and signature of the console command.
    *
    * @var string
    */
    protected $signature = 'make:view {name : like content or article/content}';

    /**
    * The console command description.
    *
    * @var string
    */
    protected $description = 'Create a new blade page';

    /**
    * The type of class being generated.
    *
    * @var string
    */
    protected $type;

    /**
    * 文件系统
    * @var Filesystem
    */
    protected $files;
    /**
    * Create a new command instance.
    *
    * @return void
    */
    public function __construct(Filesystem $files)
    {
    parent::__construct();

    $this->files=$files;
    }

    /**
    * Execute the console command.
    *
    * @return mixed
    */
    public function handle()
    {
    //
    $path = $this->getPath($this->argument('name'));

    if($this->alreadyExists($path)){
    $this->error($this->type.' already exists!');
    return false;
    }

    $this->makeDir($path);

    $this->files->put($path, $this->getStub());

    return $this->info($this->type.' created successfully.');
    }

    /**
    * Get path
    * @param string $name
    * @return string
    */
    protected function getPath($name){
    return base_path('resources/views')."/".$name.".blade.php";
    }

    /**
    * 模版是否已经存在
    * @param $path
    * @return bool
    */
    protected function alreadyExists($path){
    return $this->files->exists($path);
    }

    /**
    * 建立目录
    * @param $path
    */
    protected function makeDir($path){
    if (! $this->files->isDirectory(dirname($path))) {
    $this->files->makeDirectory(dirname($path), 0777, true, true);
    }
    }

    /**
    * 获得模版内容
    * @param string $stub //现在默认为bootstrap风格 以后还可以添加妹子UI风格模版等等
    * @return string
    * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
    */
    protected function getStub($stub='view.stub'){
    return $this->files->get(__DIR__.'/stubs/'.$stub);
    }
    }

  • ContactServiceProvider 服务提供者

    这里面 registerContact() 其实是没用的 应该是调用其他服务功能时才有用.
    但是这个简单功能完全可通过router和controller完全能实现所以 感觉不需要写个什么服务了.
    暂时这么理解吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php namespace Jai\Contact;

use Illuminate\Support\ServiceProvider;
use Illuminate\Routing\Router;

class ContactServiceProvider extends ServiceProvider
{
protected $defer = false;
public function boot()
{
//注册模版地址 这里一定要使用realpath() 不是绝对路径就会出错
$this->loadViewsFrom(realpath(__DIR__.'/../views'), 'contact');
//注册包路由
$this->setupRoutes($this->app->router);
// this for conig
$this->publishes([
__DIR__.'/config/contact.php' => config_path('contact.php'),
]);
}

/**
* Define the routes for the application.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
public function setupRoutes(Router $router)
{
//设置路由命名空间
$router->group(['namespace' => 'Jai\Contact\Http\Controllers'], function($router)
{
require __DIR__.'/Http/routes.php';
});
}

public function register()
{
$this->registerContact();
config([
'config/contact.php',
]);

//这两句是从stripe里摘出来的 绑定名称 以后注入用
$this->app->singleton('command.cashier.table', function ($app) {
return new CashierTableCommand;
});
//这里相当于注册一个command命令 参数:这里就用到上边的绑定注入了
$this->commands('command.cashier.table');
}

private function registerContact()
{
$this->app->bind('contact',function($app){
//这个绑定毫无意义 也许可能是没有用到
//return new Contact($app);
return new elick($app);
});
}
}

Alt+Shift+X
命令行工具 (这个和Terminal有区别这个是laravel自带一些命令 这个好像的装laravel插件才可以用)

Ctrl+F12
呼叫出方法列表

Ctrl+Alt+S
呼出配置

Ctrl+P
快速打开文件

Ctrl+Shift+A
搜索所有配置选项

Ctrl+Shift+Z
撤销刚才的撤销也就是windows上的 Ctrl+Y

Ctrl+Q
显示代码注释

Ctrl+E
最近打开文件

1234567891011121314151617181920212223composer selfupdate composer require "foo/bar:1.0.0" 安装一个库composer update foo/bar ...

说明一下为什么写这个.因为docker的link时需要取得环境变量里面的mysql容器的IP地址,所以想用php取得容器的环境变量.原本想用 $_ENV[] 发现没有内容 原来需要修改 php.ini 里面 variables_order = "EGPCS"
上述配置表示PHP 接受的外部变量来源及顺序,EGPCS 是Environment、Get、Post、Cookies 和Server 的缩写。如果variables_order 的配置中缺少E ,则PHP 无法接受环境变量,那么$_ENV 也就为空了。 后来想到用 php 执行 shell 命令 使用exec , system , shell_exec 但还是获取不到 好赖用 system(env) 才发现原来是我登录的用户为 www-data 所以根本获取不到额外的环境变量 所以这个想法只能作罢, 至于下面 是顺手总结的 一些全局变量的用法