根据国外的调查,Laravel是最流行的框架,最近公司需要PHP的开发人员,但是一直招不到人,只好亲自上阵研究一下。由于以前对PHP只是大致了解,这次学习开始的时候也挺挠头的,到今天稍微入了点门,就写点心得。
    总体感觉来说,如果学过Java的Spring MVC框架,对学习mvc框架都不会有什么难度,一般来说V(view)都会采用模版,laravel采用的是blade模版,能否切换还不清楚,M(model)是模型层,常见是用ORM的方式来封装数据库,Laravel用的是Eloquent,这种模式处理单表操作非常简单,多表操作稍微麻烦一些,不清楚Eloquent的成熟情况如何,有没有达到Hibernate的水平,C(controller)就是控制器,可以理解成沟通M和C的桥梁,M和C是互相不可见的。laravel通过一个路由文件/app/routes.php来对请求进行调度,可以把请求转向php文件(View)、控制器文件(也是php文件),也可以产生直接产生输出。routes.php是个很重要的文件,需要好好研究。
    laravel的安装稍微有些麻烦,根据其主站的说明文档,可以从github.com上下载,也可以通过composer安装,composer是PHP的一个依赖管理程序,类似于java世界的Maven,从github.com下载的laravel源码没法直接使用,需要在根目录运行composer update来下载组件才能使用,所以laravel的安装对composer的依赖比较大,不过有一个好处,就是composer会对其下载的类自动生成autoload.php文件,这样在调用组件的时候,就可以直接调用类、方法,如果有名称空间的话,在类前面需要加上名称空间。
   配置好了laravel环境之后,其根目录下有以下文件目录:
   实际上laravel的目录只有4个,app、bootstrap、public、vendor,上面的conf是我后来加的apache配置用的。其中public是网站根目录,其中index.php是起始页面,vendor是组件目录,composer下载的组件都保存在这个目录下,app是laravel框架的主要文件,配置信息、路由、控制器文件都在app下,bootstrap是程序开始的时候加载的文件。composer.json是composer程序的配置文件。
   和Java不同,php文件的运行是以文件为单位的,其生命周期就是文件本身的运行周期,所以文件之间是没法共享变量的,而且php文件也无法常驻内存,如果想引用别的文件内容,需要用require "reference.php"的方法将其他文件的内容包含进来。php虽然有名称空间,但是其名称空间和Java的包不同,名称空间只具备解决命名冲突的问题,不具备文件组织的能力,所以无法根据命名空间找到相应的文件,除非找到文件,看到源码,否则你也不知道这个文件是否包含名称空间。所以对于php来说,调用php文件或php类,和文件路径没有任何关系,只要require进来,就和当前文件是平级的,可以按照名称调用。
    php的这种特性非常适合Web页面这种方式,但是不适合大规模的产品开发,尤其是不适合调用第三方组件的现象。因为第三方组件如果升级,会出现路径变化,require就需要修改路径名,如果组件较多,则require的内容就很难维护了。最好的方式是php程序能够自动加载,php的自动加载有两种实现方式:较简单容易理解的__autoload()、复杂但好用的spl_autoload_register(),具体实现方式参见http://www.jb51.net/article/23956.htm,这里说的非常详细。
   对于laravel来说,采用的是composer的自动加载机制,composer的加载机制调用起来非常简单,只要在文件中引用vendor/autoload.php就可以了,autoload.php调用vendor/composer/autoload_*.php一系列文件,这些文件都是composer自动生成的。composer的生成方式有两种:
   1)composer对于其下载的组件自动生成加载文件
   2)composer针对composer.json的属性autoload的值,加载其目录下的文件,其属性值默认如下:
"autoload": {
  "classmap": [
   "app/commands",
   "app/controllers",
   "app/models",
   "app/database/migrations",
   "app/database/seeds",
   "app/tests/TestCase.php",
  ]
 },
可以看出这些目录是在app目录下的几个子目录,包括models、controllers、commands目录,自动加载命令只能加载这下面的文件,如果建立了子目录,就需要运行命令生成自动加载文件,方法是在根目录执行composer dump-autoload或者composer dumpautoload,这两个命令似乎是一样的,具体区别目前还不知道,这个命令会产生自动加载文件。我们也可以增加自己的自动加载目录,比如增加public目录,如下
"autoload": {
  "classmap": [
   "app/commands",
   "app/controllers",
   "app/models",
   "app/database/migrations",
   "app/database/seeds",
   "app/tests/TestCase.php",
   "public"
  ]
 },
执行composer dump-autoload,就可以使用public下面的文件,可以做一个测试
<?php
//public/testC.php
class testC {
    var $name,$age;
    public function __construct($name,$age) {
        $this->name = $name;
        $this->age = $age;
    }
}
         ?>
        <?php
        //public/test.php
        require "../vendor/autoload.php";
 
$testc = new testC("石永强","199");
 
echo "name=".$testc->name.",age=".$testc->age;
       ?>
        直接执行test.php会发生错误,提示找不到testC类,运行composer update,再次运行php test.php,得到如下输出
        name=石永强,age=199
   所以,一般的开发人员不需要了解太多自动加载机制,需要记住composer下载的组件直接使用就可以了,因为自动加载了,如果是自己写的类,需要运行一下加载命令,但在开发状态下运行laravel不需要运行自动加载命令,似乎是系统后台处理了,而在生产环境中,要运行一下上述命令,并增加优化参数,即composer dump-autoload --optimize,会加快一下加载速度。
   类的自动加载基本上就差不多了,配置laravel运行非常简单,但是要注意不要将laravel 4.2配置虚拟目录,最好配置为虚拟主机,
   如果是虚拟目录,需要修改public下的.htaccess文件,增加RewriteBase语句,改后如下

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes...
#RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /laravel/  #增加这一行,我的虚拟目录是/laravel
RewriteRule ^ index.php [L]
</IfModule>

Laravel学习笔记(一)的更多相关文章

  1. Laravel学习笔记(三)--在CentOS上配置Laravel

    在Laravel框架上开发了几天,不得不说,确实比较优雅,处理问题逻辑比较清楚.     今天打算在CentOS 7上配置一个Laravel,之前都是在本机上开发,打算实际配置一下.     1)系统 ...

  2. Laravel学习笔记之Session源码解析(上)

    说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了 ...

  3. Laravel学习笔记之PHP反射(Reflection) (上)

    Laravel学习笔记之PHP反射(Reflection) (上) laravel php reflect 2.1k 次阅读  ·  读完需要 80 分钟 3 说明:Laravel中经常使用PHP的反 ...

  4. 慕客网laravel学习笔记

    session中set方法使用 Session::set('user.username.age','18')嵌套使用得出$user = ['username'=>['age'=>18]]; ...

  5. laravel 学习笔记 — 神奇的服务容器

     2015-05-05 14:24 来自于分类 笔记 Laravel PHP开发 竟然有人认为我是抄 Laravel 学院的,心塞.世界观已崩塌. 容器,字面上理解就是装东西的东西.常见的变量.对象属 ...

  6. Laravel学习笔记(一)安装配置开发环境

    摘要 Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性.快乐的开发者才能创造最棒的代码!为了这个目的,开发者博取众框架之长处集中到Laravel中,这些框架甚至是基于Rub ...

  7. Laravel 学习笔记 —— 神奇的服务容器 [转]

    容器,字面上理解就是装东西的东西.常见的变量.对象属性等都可以算是容器.一个容器能够装什么,全部取决于你对该容器的定义.当然,有这样一种容器,它存放的不是文本.数值,而是对象.对象的描述(类.接口)或 ...

  8. Laravel学习笔记(二)

    解决了类自动加载的问题,剩下的问题就是看文档了,laravel的官方文档虽然简单,但是却包含了很多基础知识,学习Laravel最好先看看官方文档,我感觉帮助很大,因为laravel框架的源码看起来并不 ...

  9. Laravel学习笔记之Session源码解析(下)

    说明:在中篇中学习了session的CRUD增删改查操作,本篇主要学习关闭session的相关源码.实际上,在Laravel5.3中关闭session主要包括两个过程:保存当前URL到session介 ...

随机推荐

  1. 腾讯课堂web零基础

    utf是国际编码 gb2312 国人发明的 gbk 补充集 想看网站源代码可以按F12 <meta name ='keywords' content='设置关键字'> <meta n ...

  2. Spring框架——IOC依赖注入

    本来想把IOC和AOP一起介绍的,但是AOP内容太多了,所以就分开了,最后的结果就是这一篇只剩下一点点了.这不是第一次写关于IOC的文章了,之前写过Java反射,Java注解,也写过通过XML解析实现 ...

  3. 安卓自定义控件(四)实现自定义Layout

    本来我是不准备写这篇文章的,我实在想不出有什么样奇怪的理由,会去继承ViewGroup然后自定义一个布局,大概是我的项目经验还不够吧,想了好久,想到了这样一个需求: 需求 如图:在项目中经常有一个这样 ...

  4. pku夏令营面试

    北大面试题目: 一.内存交换 内存交换(对换)的基本思想是,把处于等待状态(或在CPU调度原则下被剥夺运行权利) 的程序从内存移到辅存,把内存空间腾出来,这一过程又叫换出:把准备好竞争CPU运行的程序 ...

  5. git使用(上)-----基本的方法

    git应该是一项必须要掌握的工具.先简述它和SVN的区别 SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活 ...

  6. Play-With-Docker在chrome上的插件

    一键使用PWD 在chrome扩展中,找到"Play With Docker"插件,并安装在chrome浏览器中 进入hub.docker.com网站,搜索熟悉的docker镜像. ...

  7. CYQ.Data 正式支持 DotNET Core 版本发布

    闲话几句: 自从上周开始,IOS人员逝去,就开始接手IOS的代码了. 并开始整理IOS的代码(包括当时一开始设计的开发框架). 在未来不远的日子里,设想是有一个系列详细的介绍I恋App和IT连App及 ...

  8. java.util.HashMap和java.util.HashTable (JDK1.8)

    一.java.util.HashMap 1.1 java.util.HashMap 综述 java.util.HashMap继承结构如下图 HashMap是非线程安全的,key和value都支持nul ...

  9. UVA 1508 - Equipment dp状态压缩

    题意:  已知n个5元组,从中选出k组,使得这些组中5个位置,每个位置上最大数之和最大. 分析:当k>5时,就是n个5元组最大的数之和,当k<5时,就当做5元组,状态压缩,用00000表示 ...

  10. 51Nod 1108 距离之和最小 V2 1096 距离之和最小 中位数性质

    1108 距离之和最小 V2基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注三维空间上有N个点, 求一个点使它到这N个点的曼哈顿距离之和最小,输出这个最小 ...