关于Laravel 的 Facades

2016年03月23日  in coding using tags Laravel , Facades

Laravel的Facades 是在service provider的基础上,声名aliases,使得这个类可以在任何地方直接调用而不再需要通过App获取 第一步 建立service provider 不再赘述 第二步
Read more


Laravel的服务提供者是非常重要的机制 它最大的特点是可以按需加载 在app.php里面,比如当前环境是测试环境,可以定义需要加载的提供者,上到生产环境中,又可以加载另外一些提供者。 创建一个服务提供者的过程如下 第一步 创建Services目录,里面写一个Service,这是我们最终代码逻辑要放的地方。 当然也可以建立Contracts文件夹定义约束它的接口。 示例: Pay.php namespace App\Services; class Pay { public function __construct($app) { } public function test() { echo 'Hello, I Am Test!';exit; } } 第二步 在Providers目录下新建一个我们的提供者,在需要加载的时候提供一个单例给app,具体的操作可以分为绑定,单例等等,详见手册。 示例: Services\PayServiceProvider.php namespace App\Providers; use Illuminate\Support\ServiceProvider; class PayServiceProvider extends ServiceProvider { public function boot() { // } public function register() { $this->app->singleton('PayService', function ($app) { return new \App\Services\Pay($app); }); } } 第三步 把服务提供者的加载放到app.php里面,在需要的时候加载它 app.php 'providers' => [ App\Providers\PayServiceProvider::class,
Read more


在把Lumen代码迁移到Laravel框架的时候,遇到了一些问题,虽然Lumen是基于Laravel的,但是也有一些不兼容的地方需要注意。在这里整理了一些Lumen和Laravel框架用法上的区别. PS:这次迁移是从Lumen5.1迁移到Laravel5.2版本 路由 一般的路由 Lumen是这样写的 $app->get('/', [ 'uses' => 'IndexController@getIndex' ]); 而Laravel是这样的 Route::get('/', [ 'uses' => 'IndexController@getIndex' ]); 有参数并且需要正则的路由 Lumen: $app->get('/docs/{id:[0-9]+}', [ 'uses' => 'SupportController@getQuestionDetail', 'as' => 'question_detail' ]); Laravel: Route::get('/docs/{id}', [ 'uses' => 'SupportController@getQuestionDetail', 'as' => 'question_detail' ])->where('id', '[0-9]+'); 或者可以直接在RouteServiceProvider里面定义全局正则 public function boot(Router $router) { // $router->pattern('id', '[0-9]+'); parent::boot($router); } Namespace 路由组里面的Namespace Lumen: $app->group(['namespace' => 'App\Http\Controllers\Admin', Laravel: Route::group(['namespace' => 'Admin', 路由多文件 Lumen是在bootstrap/app.php里面: $app->group(['namespace' => 'App\Http\Controllers'], function ($app) { require
Read more


接前文 配置 app.php Lumen是在bootsrap文件夹下面 Laravel是在config里面 这里包括两者都包括了Service Provider的注册和alias的声明只是在写法上略有不同 中间件的定义 Lumen是直接写在app.php里面的 Laravel是写在Kernel.php里面,另外Laravel支持组的概念例如 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ], 'api' => [ 'throttle:60,1', ], ]; 待续…
Read more

关于Laravel 源码分析和一些小技巧

2016年03月18日  in coding using tags Laravel

Laravel 的多语言是可以覆盖的,app.php里面定义的fallback_locale是基础语言包,如果一个词在当前语言包里面没有的时候就会去基础语言包里面找 Laravel 的 Cookie是经过加密的,任何本地改动都会造成cookie失效 赋值方法是 Cookie:queue(name,value,min); 取值方法 $request->cookie[name]; 如果想不加密,就还是用PHP原生方法吧 Kernel中定义的web中间件有四个 EncryptCookies 加密和解谜Cookie AddQueuedCookiesToResponse 写入Cookie 就是之前queueinquiry的 StartSession 相当于session_start VerifyCsrfToken 方式CSRF攻击的 api的就只有ThrottleRequests一个,主要是用来限制单位时间内请求次数的防止被刷
Read more

PHP SSH2 扩展

2016年03月16日  in env using tags PHP , SSH2

安装 下载包 wget http://www.libssh2.org/download/libssh2-1.4.2.tar.gz wget http://pecl.php.net/get/ssh2-0.12.tgz 先安装 libssh2 再安装 SSH2 $ tar -zxvf libssh2-1.4.2.tar.gz $ cd libssh2-1.4.2 $ ./configure --prefix=/usr/local/libssh2 $ make && make install 安装ssh2 $ tar -zxvf ssh2-0.12.tgz $ cd ssh2-0.12 $ /usr/local/zend/bin/phpize $ ./configure --prefix=/usr/local/ssh2 --with-ssh2=/usr/local/libssh2 --with-php-config=/usr/local/zend/bin/php-config $ make && make install 修改php.ini 加入 extension=ssh2.so 重启Zend Server 调试 用户名密码方式登录 $user="root";//远程用户名 $pass="123456";//远程密码 $connection=ssh2_connect('192.168.1.46',22); ssh2_auth_password($connection,$user,$pass); 用sshkey方式登录 $connection=ssh2_connect('192.168.1.46',22); if(ssh2_auth_pubkey_file($connection, 'root', '/home/id_rsa.pub', '/home/id_rsa', 'secret')) { echo "Public Key Authentication Successful\n"; }
Read more

HTTP与HTTPS的区别

2016年03月16日  in env using tags https , http & https

HTTP协议 浏览器和服务器之前的传输以前都是用HTTP协议做的,浏览器发送请求,服务器响应。但是有个问题就是数据的传输都是明文的,现在WIFI到处都是,万一哪台路由被人控制了,那你用这个WIFI的时候,所有来回的信息都是明文,不就悲剧了么 所以有了HTTPS协议 HTTPS协议 HTTPS协议简单的说就是把传输的数据加密了一下,只不过这个加密过程比较复杂并且不可逆,所以相对来说要安全许多。 SSL(Secure Sockets Layer) 用于给HTTPS进行加密的协议,由网景公司设计。目前已经淘汰 TLS(Transport Layer Security) SSL的后续版本,目前到1.2,HTTPS协议实际使用的就是它 加密过程就不赘述了,在下面的文章里面有 参考文章
Read more

Nginx 配置 HTTPS

2016年03月16日  in env using tags https , nginx

生成证书需要openssl 没有的话先安装 创建服务器私钥 $ openssl genrsa -des3 -out server.key 1024 创建签名请求的证书(CSR) $ openssl req -new -key server.key -out server.csr 会要求填写一些信息 重新生成没有密码的key $ cp server.key server.key.org $ openssl rsa -in server.key.org -out server.key 产生私钥 $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt 配置Nginx server { server_name YOUR_DOMAINNAME_HERE; listen 443; ssl on; ssl_certificate /usr/local/nginx/conf/server.crt; ssl_certificate_key /usr/local/nginx/conf/server.key; }
Read more


第一步 创建Droplet 选择 One Click Apps 标签 选择 Word Press 完成之后的配置 第二步 通过SSH配置Word Press $ ssh root@droplet.ip.address 参考这里
Read more

Digital Ocean API整理

2016年03月15日  in api using tags Digital Ocean

请求类型 GET 只读请求,不需要验证,不会影响查询对象 DELETE 删除操作 PUT 更新操作 POST 新增操作 HEAD 只返回GET查询的head部分用于查询metadata 需要理解的几个词 Account 账户,包括基本信息,状态,水滴上限等等 Droplet 水滴(暂时这么翻译吧),可以理解为容器,Ocean的基本单位 Image 镜像,给Droplet使用的,可以作为备份,快照,或者是基础镜像 Actions 类似于日志的东西 Regions 区域,Digital Ocean 数据中心所在地,镜像可以在不同的区域之间切换 Slug 区域的唯一标示,human-readable Size 硬件配置信息,一组配置信息包括内存,磁盘,区域CPU数量等信息。 Floating IP 公网可访问的静态IP,跟容器绑定
Read more