作者归档:Daniel Sun

一步一步学Laravel,使用默认的Auth控制器在登录时增加字段验证(验证用户登录字段是否为邮箱地址)

在laracasts的14期视频中,作者讲述了在Laravel中如何使用默认的Auth控制器来快速构造用户验证的功能。

其中我发现,这个Auth控制器默认情况,并不会在登录时检测用户输入的用户名是否为邮箱(默认登录字段为邮箱)

这导致用户输入其他字段的时候也会进入到数据库进行查询。

下面是一个在不修改原有vendor下AuthenticatesUsers的方式(低耦合)来实现检查登录字段是否为邮件功能

在AuthController.php,找到下面的代码

use AuthenticatesAndRegistersUsers, ThrottlesLogins

修改为:

use AuthenticatesAndRegistersUsers, ThrottlesLogins {
    AuthenticatesAndRegistersUsers::postLogin as parentPostLogin;
}

QQ图片20151202020735

上面做的目的是把AuthenticatesAndRegistersUsers(其实这个类继承了AuthenticatesUsers)postLogin修改为parentPostLogin,方便我们对postLogin进行重写。

然后我们在AuthController.php中重写postLogin方法,进行我们的Email验证,并且在把流程归还给原先的parentPostLogin

public function postLogin(Request $request)
    {
        $this->validate($request, [
            $this->loginUsername() => 'email'
        ]);
        return $this->parentPostLogin($request);
    }

然后运行成功

QQ截图20151202020933

 

其实这里面主要是要看懂和学会php的trait新特性,也就是多继承

一步一步学Laravel,PHP 5.4.0 起的traits多继承特性

自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。

Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。

Trait 示例


优先级

从基类继承的成员被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。
优先顺序示例

sayHello();
?>

以上例程会输出:Hello World!
从基类继承的成员被插入的 SayWorld Trait 中的 sayHello 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
另一个优先级顺序的例子

sayHello();
?>

以上例程会输出:Hello Universe!

多个 trait

通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。
多个 trait 的用法的例子

sayHello();
$o->sayWorld();
$o->sayExclamationMark();
?>

以上例程会输出:Hello World!

冲突的解决

如果两个 trait 都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。
为了解决多个 trait 在同一个类中的命名冲突,需要使用 insteadof 操作符来明确指定使用冲突方法中的哪一个。
以上方式仅允许排除掉其它方法,as 操作符可以将其中一个冲突的方法以另一个名称来引入。
冲突解决的例子


在本例中 Talker 使用了 trait A 和 B。由于 A 和 B 有冲突的方法,其定义了使用 trait B 中的 smallTalk 以及 trait A 中的 bigTalk。
Aliased_Talker 使用了 as 操作符来定义了 talk 来作为 B 的 bigTalk 的别名。

修改方法的访问控制


本文引用自:http://www.jb51.net/article/61260.htm

物联网基础试题与答案

  1. 物联网通常被公认为有3个层次,从下到上依次是感知层、网络层和应用层
  2. 霍尔传感器是一种 磁电式传感器。
  3. 传感器节点一般由 传感器、处理器、无线收发器和电源组成。
  4. Intemet 的功能包括:(a)信息的获取和发布;(b)电子邮件(E – mail );(c)电子商务;(d)网络电话;(e)Internet的其他应用。
  5. 中间件是位于平台和应用之间的具有标准程序接口和协议的通信服务
  6. 蓝牙是一种短距离的无线连接技术标准的代称。
  7. RFID技术是一种非接触式的自动识别技术,它通过射频信号 自动识别目标对象,可快速地进行物品追踪和数据交换。
  8. 嵌入式系统的定义是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
  9. 无线传感器网络是由大量具有无线通信和数据处理能力的传感器节点组成的。
  10. 条形码技术核心内容是利用光电扫描设备识读条码符号,从而实现机器的自动识别,并快速准确地将信息录入到计算机进行数据处理。
  11. 数据在信道中的传输形式有:基带传输 、频带传输 、 宽带传输 。
  12. 中间件是位于平台和应用之间的具有标准程序接口和协议的通信服务。

二、

1.什么是RFID?RFID的技术组成。

RFID技术是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象,可快速地进行物品追踪和数据交换。最基本的RFID系统由三部分组成:电子标签(Tag) 也就是应答器:由耦合元件及芯片组成,标签含有内置天线,用于和射频天线间进行通信。阅读器:读取(在读写卡中还可以写入)标签信息的设备。天线:在标签和阅读器间传递射频信号。

2.说明物联网、传感网与泛在网之间的关系。

传感网是物联网的组成部分,物联网是互联网的延伸,泛在网是物联网发展的愿景

3.什么是传感器?传感器是由哪几部分组成?说明各部分的作用。

传感器是能感受规定的被测量并按照一定的规律转换成可用输出信号的器件和装置,通常由敏感元件和转换元件组成。传感器通常是由敏感元件、转换元件和转换电路组成:①敏感元件:直接感受被测量,并输出与被测量成确定关系的物理量。②转换元件:敏感元件的输出就是它的输入,抟换成电路参量。③转换电路:上述电路参数接入基本转换电路,便可转换成电量输出。

4.嵌入式系统的特点是什么?有哪些应用?

特点: ① 系统内核小。 ② 专用性强。 ③ 系统精简。 ④ 高实时性的系统软件(OS)是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。 ⑤ 嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。 ⑥ 嵌入式系统开发需要开发工具和环境。应用:

1)工业控制。2)交通管理。 3)信息家电。 4)家庭智能管理系统。 5)POS网络及电子商务。6)环境工程与自然。 7)机器人。

三、论述题

1.云计算的核心技术。

云计算的核心技术。(1)编程模型:云计算中的编程模型对编程人员来说非常重要,为了能让用户轻松的使用云计算带来的服务和利用编程模型可以轻松的编写可以并发执行的程序。云计算系统的编程模型应尽量简单,而且保证后台复杂的并发执行和任务调度对编程人员透明。(2)数据存储技术:云计算采用了分布式存储的方式来存储数据,同时也保证了数据的高可用性、高伸缩性。通过采用冗余存储的方式来保证数据的可靠性,即同一份数据会在多个节点保存副本。另外,为了保证大量用户并行的使用云计算服务,同时满足大量的用户需求,云计算中的存储技术必须具有高吞吐率和高传输率的特点。(3)数据管理技术:云计算系统是针对超大数据量进行处理、分析,从而为用户提供高效的服务。因此,系统中的数据管理技术必须能够高效的管理这些大数据集,并且能够在这些超大规模数据中查询特定的数据,也是数据管理技术所必须解决的问题。(4)虚拟化技术:云计算平台利用软件来实现硬件资源的虚拟化管理、调度以及应用。虚拟化技术是指实现虚拟化的具体的技术性手段和方法的集合性概念。在云计算中利用虚拟化技术可以大大降低维护成本和提高资源的利用率。(5)云计算平台管理技术: 云计算系统的平台管理技术能够使大量的服务器协同工作,方便的进行业务部署和开通,快速发现和恢复系统故障,通过自动化、智能化的手段实现大规模系统的可靠运营。

2.说明物联网的技术体系架构及各层次的关键技术。

物联网的技术体系框架包括感知层技术、网络层技术、应用层技术和公共技术。感知层是物联网发展和应用的基础,包括传感器等数据采集设备,是数据接入到网关前的传感器网络RFID技术、传感控制技术、短距离无线通讯技术是感知层涉及的主要技术。物联网的网络层一般建立在现有的移动通讯网或互联网的基础之上。实现更加广泛的互联功能。关键技术:包含了现有的通信技术,如移动通信技术、有线宽带技术、公共交换电话网(PSTN)技术、Wi-Fi通信技术等,也包含了终端技术,如实现传感网与通信网结合的网桥设备、为各种行业终端提供通信能力的通信模块等。应用层主要包含应用支撑平台子层和应用服务子层。其中应用支撑平台子层用于支撑跨行业、跨应用、跨系统之间的信息协同、共享、互通的功能。主要是基于软件的各种数据处理技术,此外云计算技术作为海量数据的存储、分析平台,也将是物联网应用层的重要组成部分。

3.什么是智能家居?智能家居有什么特征?

智能家居在英文中常用Smart Home、Intelligent Home,是以住宅为平台,兼备建筑、网络通信等,是集系统、结构、服务、管理、控制于一体,来创造一个优质、舒适、安全、便利、节能、环保的居住生活环境空间。智能家居系统的特征:1) 安全性。2) 易用性。3) 稳定性。4) 扩展性。

一步一步学Laravel,在Request验证中判断用户操作是否为update

Laravel的验证相关资料:http://laravelacademy.org/post/240.html

在laracasts的13期视频的13分22秒,作者给出了在rules方法中可以根据条件给予不同的规则,却没有说该如何判断。

QQ截图20151130014700

通过官方的讨论区找到了两种方法(地址:https://laracasts.com/series/laravel-5-fundamentals/episodes/13

第一种,使用

$this->isMethod('patch')

来判断是否为更新操作。

第二种,使用

$this->input('_method')

获取表单的_method值,这个值在更新时候将为PATCH。

 

一步一步学Laravel,在phpstorm中快速更新命名空间或者代码提示

参考文章:http://blog.jetbrains.com/webide/2011/05/phpdoc-inspections/

第一次用phpstorm,在laracasts的教学视频中发现,在phpdoc(注释)和输入新的完整的命名空间之后,作者用了一个快捷键更新了phpdoc,还可以把完整命名空间移到头部的use中。

视频参考的坏处就是没有办法看到作者按的快捷键。

那么这个快捷键就是alt+enter

QQ截图20151130014200

QQ截图20151130014240

一步一步学Laravel,laracasts的laravel视频中发现的非常酷的JSON查看插件 For Chrome

安装之后效果如下

插件名:JSON Formatter

安装地址:https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa?utm_source=gmail

Makes JSON easy to read. Open source.

FEATURES

  • JSON & JSONP support
  • Syntax highlighting
  • Collapsible trees, with indent guides
  • Clickable URLs
  • Toggle between raw and parsed JSON
  • Works on any valid JSON page – URL doesn’t matter
  • Works on local files too (if you enable this in chrome://extensions)
  • You can inspect the JSON by typing “json” in the console

一步一步学Laravel,在PhpStorm使用Laravel5的代码提示

在PhpStorm中使用Laravel的代码提示,可以查看下面的github

https://github.com/barryvdh/laravel-ide-helper

这里说一下安装方法

在app目录执行下面的命令

composer require barryvdh/laravel-ide-helper

然后编辑config/app.php,找到providers加入下面的代码

Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,

QQ截图20151119172810

最后执行

php artisan ide-helper:generate

QQ截图20151119172914

然后就可以尝试代码提示了,比如

QQ图片20151119173010