根据国外的调查,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. ReentrantLock可重入锁的使用场景

    摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些. 场景1:如果发现该操作已经在执行中则不再执行(有状态执行) a.用在定时任务时,如果任务执行时间可能超过下次 ...

  2. [转载] 多图详解Spring框架的设计理念与设计模式

    转载自http://developer.51cto.com/art/201006/205212_all.htm Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框 ...

  3. Vue浅谈

    谈Vue 最近在学习Vue相关的知识点并且也做一些练手,就在学习过程中出现的各种坑爹的地方做一个总结!之后再遇到也不会抓瞎. 1.Vue工程的安装 (1)首先先安装node.js这是Vue的运行基础. ...

  4. 用CRT查找内存泄漏

    引用原文地址 : https://msdn.microsoft.com/en-us/library/x98tx3cf.aspx 1. 在program中严格按下面顺序include #define _ ...

  5. jmockit学习总结

    mock类型和实例 从依赖的测试代码调用的方法和构造函数是mock(模拟)的目标. Mocking提供了我们需要的机制,以便将被测试的代码与(一些)依赖关系隔离开来.我们通过声明适当的模拟字段和/或模 ...

  6. java虚拟机概述

    java 虚拟机是什么?       java虚拟机是一个将字节码指令映射为对应物理操作系统指令的程序.       java程序的运行需要事先安装 jdk,而在jdk内部的jre中其核心就是 jvm ...

  7. [react] 细数 React 的原罪

    Props & onChange 的原罪 .「props & onChange 接口规范」它不是一个典型的「程序接口规范」. 当你拿到一个可视组件的 ref,却没有类似 setProp ...

  8. APP加固技术历程及未来级别方案:虚机源码保护

    传统App加固技术,前后经历了四代技术变更,保护级别每一代都有所提升,但其固有的安全缺陷和兼容性问题始终未能得到解决.而下一代加固技术-虚机源码保护,适用代码类型更广泛,App保护级别更高,兼容性更强 ...

  9. jquery无new构建学习笔记

    当我们想要创建一个对象,我们可能使用new方法去构建一个对象,那按道理jquery也是一个对象,应该也是用new jquery()来构建呀为什么我们创建jquery对象不用new jquery()而是 ...

  10. 在centOS上搭建wordpress博客系统

    一.主要内容 1.安装LAMP服务器系统(Linux.Apache.MySQL.PHP ); 2.安装wordpress: 二.具体步骤 一.LAMP环境设置 1.安装LAMP系统,在centOS上可 ...