Laravel 5 Rbac Example

Laravel 5 已经放出来好久了,之前项目一直用 Laravel 4 做的,为了尝鲜,清明节假期花了一天时间试用了下 Laravel 5,随手写个权限管理 Rbac 的后台,只供练手和熟悉新的框架版本,说说使用感受吧。 目录结构变化了一些,加入自动加载 PSR-4 Middleware 中间件很方便,可以完成 filter 的工作 Request 可以把 validation 放在里面处理,cool 配置用 env,更加灵活 去除了 Model 目录,不过还是可以只有建立目录,可以按照 PSR-4 的命名空间自动加载 。。。。。。 当然还有很多新特性我暂时还没用到,Rbac 主要用了 “zizaco/entrust”: “dev-laravel-5” 只是练手用的代码,不是完善的项目,不过改改直接拿来做个后台还是不错的,UI 用了 Amaze UI 的后台模板 转载请注明: 转载自Yuansir-web 菜鸟 | LAMP 学习笔记 本文链接地址: Laravel 5 Rbac Example 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

阅读全文

上一篇《Elasticsearch与 MongoDB 数据同步及分布式集群搭建 (一)》我们已经配置了一个 Elasticsearch与 MongoDB 数据同步高可用,可扩展以及分布式是 ES 的一个优势和特色,扩展垂直扩展或者向上扩展,Vertical Scale/Scaling Up,或是水平扩展或者向外扩展,Horizontal Scale/Scaling Out。 一个节点会运行一个 ES 的实例,一个集群则会包含拥有相同cluster.name的一个或者 多个节点,这些节点共同工作来完成数据共享和负载分担。随着节点被添加到集群,或者从集群中被删除,集群会通过自身调节来将数据均匀分布。集群中的一个节 点会被选为主节点(Master Node),它负责管理整个集群的变化,如创建或者删除一个索引(Index),向集群中添加或者删除节点。任何节点都可以成为主节点。在我们的例子中只 有一个节点,所以它就承担了主节点的功能。ES 通过分片将数据分布在集群中。可以将分片想象成数据的容器。文档会被存储在分片中,而分片则会被分配到集群 中的节点中。随着集群的扩大和虽小,ES 会自动地将分片在节点之间进行迁移,以保证集群能够保持一种平衡。一个分片可以是主分片(Primary Shard)或者副本分片(Replica Shard)。索引中的每份文档都属于一个主分片,所以主分片的数量就决定了你的索引能够存储的最大数据量。一个副本分片则只是一个主分片的拷贝。副本用 来提供数据冗余,用来保护数据在发生硬件故障是不会丢失,同时也能够处理像搜索和获取文档这样的读请求。主分片的数量在索引建立之初就会被确定下来,而副 本分片的数量则可以在任何时候被更改。 具体原理可以参考官方文档:《life inside a cluster》 演示水平扩展,这里新添加一个 ES 实例的虚拟机,这样我们之前的 ES 实例为:10.253.1.70,现在添加一个新的节点:10.253.1.71.,需要保证这两个节点之间是可以互相通信的. 配置 config/elasticsearch.yml 10.253.1.70 相关配置为: cluster.name: elasticsearch_ryan node.name: "cluster-node-1" </pre> 10.253.1.71相关配置为: <pre class="brush: bash; title: ; notranslate" title="">cluster.name: elasticsearch_ryan node.name: "cluster-node-1" 其实就是要保证有共同的cluster.name 启动 10.253.1.71 的 ES 服务,然后可以查看下节点集群的状态: curl -XPOST "http://10.253.1.70:9200/_cluster/health" { "cluster_name": "elasticsearch_ryan", "status": "green", "timed_out": false, "number_of_nodes": 2, "number_of_data_nodes": 2, "active_primary_shards": 9, "active_shards": 18, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0 } 可以看到现在有 2 个节点,status 表集群的状态,具体状态含义:

阅读全文

Elasticsearch通过 River 可以与多种数据源 Wikipedia, MongoDB, CouchDB, RabbitMQ, RSS, Sofa, JDBC, FileSystem,Dropbox 等同步,公司的业务是用 MongoDB,今天测试环境虚拟机上配置了一下 Elasticsearch 与 MongoDB 的同步,作个大概的过程记录,主要利用richardwilly98 / elasticsearch-river-mongodb。 River 通过读取 mongodb 的 oplog 来同步数据,oplog 这个表来使集群中的不同机器数据同步的,可以保证 es 里面的数据和 mongodb 里面的是一样的,所以 Mongdb 必须是个集群才能拥有 oplog.注意:该插件只支持集群环境下的 mongodb,因为集群环境下的 mongodb 才有 oplog 这个 Elasticsearch 和 MongoDB 需要安装对应的版本才能实现同步,我这里用了最新的 Elasticsearch 1.4.2 和 MongoDB 3.0.0,相应的版本要求参考下表 MongDB 是一个副本集的集群,具体副本集集群的搭建不详细写了,Elasticsearch 的安装配置也省略。 1.安装 elasticsearch-river-mongodb # ./elasticsearch-1.4.4/bin/plugin -install elasticsearch/elasticsearch-mapper-attachments/2.4.1 # ./elasticsearch-1.4.4/bin/plugin -i com.github.richardwilly98.elasticsearch/elasticsearch-river-mongodb/2.0.5 2.建立 river curl -XPUT "http://10.253.1.70:9200/_river/threads_mongo_river/_meta"&lt;/span&gt; -d' { "type": "mongodb", "mongodb": { "servers": [ { "host": "10.

阅读全文

主要推荐 laravel 几个适合开发调试用的工具 Clockwork 首先 Chrome 插件 Clockwork 安装 Composer Package, composer.json 中添加 “itsgoingd/clockwork”: “1.*” ,composer update app/config/app.php 配置文件中添加: 'providers' => array( ... 'Clockwork\Support\Laravel\ClockworkServiceProvider' ) 在你的 Base Controller 中的构造方法中添加如下代码: public function __construct() { if (app()->env == 'local') { $this->beforeFilter( function () { Event::fire('clockwork.controller.start'); } ); $this->afterFilter( function () { Event::fire('clockwork.controller.end'); } ); } } 再 chrome 的控制台会看到如下信息: Clockwork 还提供了其他一些有用的 log 相关函数,具体配置使用请看 github 文档.https://github.com/itsgoingd/clockwork anbu 配置方法和 Clockwork 类似,但是不需要 Chrome 插件,效果如下:

阅读全文

Service Provider 可以把相关的 IoC 注册放到到同一个地方,大部份的 Laravel 核心组件都有 Service Provider,所有被注册的服务提供者都列在 app/config/app.php 配置文件的 providers 数组里。如何写一个 Service Provider 手册里面写的也比较简洁,实际项目中如何运用还是有点模糊,这里来简单写一个实例,便于理解和实际项目中扩展使用,也许对 IOC 和依赖注入都有个更深刻的了解。 和《Laravel 创建 Facades 实例》类似,先在 app 目录下新建目录 app/libs/App/Service,所有的 Service 都放在这个 Service 下面,然后在composer.json中添加: "autoload": { ...... "psr-0":{ "App":"app/libs" } }, App 的命名空间随意定,执行下composer dump。 建立一个TestService,新建目录app/libs/App/Service/Test, 简单写一个 ServiceInterface 并实现。 app/libs/App/Service/Test/TestServiceInterface.php代码很简单: <?php namespace App\Service\Test; interface TestServiceInterface {} app/libs/App/Service/Test/TestService.php代码很简单: <?php namespace App\Service\Test; class TestService implements TestServiceInterface { public function callMe() { dd('this is the test service'); } } 接下来就是定义一个 Service Providor,新建app/libs/App/Service/ServiceServiceProvidor.

阅读全文

Composer install 等半天的日子一去不复返了,感谢洪大牛,今天试用了下,终于不用等待了。 Composer 是 PHP 下最知名的第三方包管理工具,其网站的访问量和第三方软件包的数量增长的速度非常快,加上由于其服务器在国外,所以导致国内用户访问速度非常慢,更新一些第三方软件的时候经常需要拨 VPN 才能顺利进行。 将下面一段代码添加到$COMPOSER_HOME/config.json (一般在~/.composer 目录下,也可以通过 composer config -g -e 命令进行设置) 或者添加到你项目中的 composer.json 文件中. { "repositories": [ { "packagist": false }, { "type": "composer", "url": "http://218.244.132.204/proxy/packagist" } ] } 注意事项 如果你使用了本代理,你将不能使用 Composer 的 search 和 notice 方法。 转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记 如果觉得本篇文章对您十分有益,何不 打赏一下 本文链接地址: 用国内镜像,加速 Composer 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

阅读全文

今天用 Laravel 的 migrate renameColumn 来更改数据库字段名的时候,发现报错 PHP Fatal error: Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found 原来 Laravel 4.2 以后用 renameColumn 的时候需要在 composer.json 中加上 doctrine/dbal 的依赖,默认已经不在 Laravel 中了 官方详情:http://laravel.com/docs/releases Doctrine DBAL If you are using the renameColumn function in your migrations, you will need to add the doctrine/dbal dependency to your composer.json file. This package is no longer included in Laravel by default. 转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记 如果觉得本篇文章对您十分有益,何不 打赏一下

阅读全文

Laravel 创建 Facades 实例

使用 Laravel 框架必不可少的会用到它很多强大的Facades,Facades 提供了一个“静态”接口到 IoC 容器类,官方的文档写的太过抽象,关于如何创建一个 Facades 有点晦涩,我来写个简单的创建 Facades 的过程,作为参考吧。 官方是这样说的 Creating a facade for your own application or package is simple. You only need 3 things: An IoC binding. A facade class. A facade alias configuration. A great place to register this binding would be to create a new service provider named PaymentServiceProvider, and add this binding to the register method. You can then configure Laravel to load your service provider from the app/config/app.

阅读全文

Thrift 应用总结

以前工作中也用过一些远程服务调用,比如 Webservice,PHP 中常用的 SOAP,XML-RPC,还有 jsonp 和 restful 之类的。最近公司工作中,用到了 thrift 这种远程服务调用框架,总结和记录下。 Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。它通过一个中间语言 IDL(接口定义语言)来定义 RPC 的接口和数据类型,然后通过一个编译器生成不同语言的代码并由生成的代码负责 RPC 协议层和传输层的实现。 Thrift 的架构图 黄色是用户实现的业务逻辑,褐色部分是根据 Thrift 定义的服务接口描述文件生成的客户端和服务器端代码框架,红色部分是根据 Thrift 文件生成代码实现数据的读写操作。红色部分以下是 Thrift 的传输体系、协议以及底层 I/O 通信,使用 Thrift 可以很方便的定义一个服务并且选择不同的传输协议和传输层而不用重新生成代码。用户在 Thirft 描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提服务)。其中 protocol(协议层, 定义数据传输格式,可以为二进制或者 XML 等)和 transport(传输层,定义数据传输方式,可以为 TCP/IP 传输,内存共享或者文件共享等)被用作运行时库。 传输协议 在传输协议上总体划分为文本和二进制 ,为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数. TBinaryProtocol — 二进制编码格式进行数据传输 TCompactProtocol — 高效率的、密集的二进制编码格式进行数据传输 TJSONProtocol — 使用 JSON 的数据编码协议进行数据传输 TSimpleJSONProtocol — 只提供 JSON 只写的协议,适用于通过脚本语言解析 TDebugProtocol – 使用易懂的可读的文本格式,以便于 debug 数据传输 TSocket — 使用阻塞式 I/O 进行传输,是最常见的模式 TFramedTransport — 使用非阻塞方式,按块的大小进行传输 TNonblockingTransport — 使用非阻塞方式,用于构建异步客户端 TMemoryTransport – 将内存用于 I/O TZlibTransport – 使用 zlib 进行压缩, 与其他传输方式联合使用 TFileTransport – 以文件形式进行传输 服务端类型

阅读全文

好吧,标题党了,本文非原创啊! 看 Laravel 的IoC 容器文档只是介绍实例,但是没有说原理,之前用 MVC 框架都没有在意这个概念,无意中在phalcon的文档中看到这个详细的介绍,感觉豁然开朗,复制粘贴过来,主要是好久没有写东西了,现在确实很懒变得! 首先,我们假设,我们要开发一个组件命名为 SomeComponent。这个组件中现在将要注入一个数据库连接。 在这个例子中,数据库连接在 component 中被创建,这种方法是不切实际的,这样做的话,我们将不能改变数据库连接参数及数据库类型等一些参数。 <?php class SomeComponent { /** * The instantiation of the connection is hardcoded inside * the component so is difficult to replace it externally * or change its behavior */ public function someDbTask() { $connection = new Connection(array( "host" => "localhost", "username" => "root", "password" => "secret", "dbname" => "invo" )); // ... } } $some = new SomeComponent(); $some->someDbTask(); 为了解决上面所说的问题,我们需要在使用前创建一个外部连接,并注入到容器中。就目前而言,这看起来是一个很好的解决方案:

阅读全文

作者的图片

Ryan是菜鸟 | LNMP技术栈笔记

一步一个脚印,一直在路上!记录LNMP技术栈,Web架构,区块链等笔记

菜鸟码农

南京