解决了类自动加载的问题,剩下的问题就是看文档了,laravel的官方文档虽然简单,但是却包含了很多基础知识,学习Laravel最好先看看官方文档,我感觉帮助很大,因为laravel框架的源码看起来并不容易,一层一层的套,看文档会快一些,如果想更详细的了解,可以考虑研究源码。

    考虑到laravel框架的复杂性,最好不要使用编辑器,要用IDE来开发,因为IDE可以调试、跳转到类声明文件等等,还包括一些自动完成的功能。不过如果坚持要使用编辑器,推荐用sublime,常见的IDE有Netbeans、PHPEclipse、Aptana、ZendStudio、PHPStorm,其中ZendStudio、PHPStorm是收费软件,如果有钱是更好的选择,如果注重版权,可以考虑Netbeans、PHPEclipse、Aptana,PHPEclipse和Aptana比较类似,我比较喜欢Netbeans和Aptana,它们都能提供语法加亮、代码提示、调试、版本管理方面的支持,使用上都差不多,我选择了Netbeans,因为Netbeans支持采用PHP内建的web服务器,对于开始一个新项目很方便,适合初学者,也可以选择Aptana,只是麻烦一些,需要修改Apache配置文件,增加一个虚拟主机。
    在使用IDE之前最好增加IDE支持,因为常见的IDE无法理解Laravel的Facades的工作方式(不仅IDE不懂,我也没看懂),barryvdh开发了一个IDE-Helper工具,配置过程也比较简单,官网很详细,这里做个备注:
    1)修改composer.json的内容如下
         在require下增加 "barryvdh/laravel-ide-helper": "1.*"
         然后在laravel根目录(composer.json所在目录)运行composer update,
         或者直接运行:composer require barryvdh/laravel-ide-helper: 1.*
         运行结束之后会在vendor目录下增加一个barrayvdh的目录。
    2)在app/config/app.php中providers数组增加一行:
       'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',
    3)现在其实已经可以代码提示了,但是如果增加了新的组件,需要手工运行
       php artisan clear-compiled
       php artisan ide-helper:generate
       也可以每次更新都自动生成,在composer.json中script->post-update-cmd下修改,增加如下
   "post-update-cmd": [
   "php artisan clear-compiled",
   "php artisan ide-helper:generate",
   "php artisan optimize"
  ],     
    这样就可以使用自动提示了,而且可以看一下laravel根目录下自动生成的_ide-helper.php文件,可以看到很多类的相互关系,挺不错的,比如在routes.php中Route,根据_ide-helper.php,可以知道Route对应的是\Illuminate\Routing\Router,根据vendor/composer/autoload_classmap.php文件的对应关系,可以知道,对应的是vendor/laravel/framework/src/Illuminate/Routing/Router.php。Netbeans的代码跳转往往也是跳到_ide-helper.php文件。
    如果对PHP很熟悉,学习框架就非常简单了,如果不是很熟悉,推荐手头放一本PHP参考书备查,我觉的LAMP兄弟连的《细说PHP》不错,如果经常使用,建议买一本。

    根据官方文档,一个请求的生命周期如下:
    1)请求进入public/index.php文件,如果使用Apache服务器,会读取根目录的.htaccess文件,调用重写功能,不需要输入index.php,就可以调用了,不过在虚拟目录的情况下,就得写index.php才行。
    2)调用bootstrap/start.php文件,创建应用(Illuminate\Foundation\Application)并检查环境
    3)调用framework/start.php,路径为\vendor\laravel\framework\src\Illuminate\Foundation\start.php 
    4)装载app/start目录下的global.php、artisan.php、local.php
    5)装载app/routes.php
    6)将Request对象发给Application,处理之后返回Response对象
    7)将Response对象返回到client
    这个过程比较复杂,注意上面的“装载”、"调用"都是"require"的意思。但大部分内容我们不需要管,首先需要了解的是app/routes.php,这个是laravel的核心功能,会将你的请求转到对应的资源上,如显示页面的php文件、控制器(php)文件等。
    对于开发人员来数,需要注意的是routes.php,这个文件代表了每一个浏览器发出的请求最终调用的php程序,这一点其实和Java的MVC类似,PHP可以做到这种程度让我有点惊讶。不过是好事情,意味着学习起来会比较容易。
    routes.php中的路由调度常见的有一下模式
    Route::get('/',function(){
        return View::make('hello');        
    });
   这里需要注意一下,Route实际上对应的是vendor/laravel/framework/src/Illuminate/Routing/Router.php,其中的/代表的是虚拟路径,get代表请求方式,还可以是post方式,或者any(任意方式),View::make('hello')代表路由目标为app/view/hello.php,指向其他的文件,依此类推就可以了。
    通常我们在转向新的页面的时候,需要携带一些对象或者数组过去,也很容易,只要
    return View::make("hello")-)with('user',$user)->with('student',$student)
    在新的页面调用只要直接调用$user,$student就可以了。
    上面的路由是最简单的方式,如果在到达新的页面之前需要更多的逻辑计算,就需要逻辑放到Controller类中,这样会让routes.php较为简洁,当然Controller类中的逻辑如果过于复杂,也可以将逻辑分出来,比如业务逻辑较为复杂,可以将业务逻辑保存在其他的php文件,比如建立一个business目录,用来保存商业逻辑。要记住将business目录加入到composer.json的autoload下,才能自动被加载,被其他php文件调用。
     所有的Controller类都要是BaseController的子类,BaseController位于/app/controller目录下,路由调用方式如下
     Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));
   这里需要注意的是路由user/profile,指向目标为Controller类UserController的方法showProfile,profile是路由的名称,在其他地方可以使用这个名字,跳转到UserController的showProfile方法。
   一般来说,知道这些就可以进行开发了,如果想知道更多,可以参考官方文档,包括路由加参数,如user/profile/1这种方式,过滤器等。
  

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

  1. laravel学习笔记(二)

    路由 HTTP方法:支持http1.1中所有类型传参方式,get,post,put,delete,options,patch Route::get($url,$callback); 路由参数: Rou ...

  2. laravel学习笔记二

    代码编写提示工具

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

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

  4. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  5. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  6. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  7. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  8. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  9. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  10. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

随机推荐

  1. 利用可变参数模拟Printf()函数实现一个my_print()函数和调用可变参数注意的陷阱!

    可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈. 例如,对于函数: void test(char a ...

  2. Python 学习之路

    这个是我学python以来,写的的第一个小游戏,写的不好 题目:石头剪刀布 主要有两个难度 在普通模式,电脑是随机出 在噩梦下,就是不管你出什么,电脑都会赢你,牛逼吧 #Author:陈浩彬 impo ...

  3. Database differential backup差异备份和还原

    完整备份: 备份全部选中的文件和文件夹,并不依赖文件的存档属性来确定备份哪些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性),完全备份也叫完整备份. 差异 ...

  4. 《java.util.concurrent 包源码阅读》19 PriorityBlockingQueue

    前面讲ScheduledThreadPoolExecutor曾经重点讲到了DelayedWorkQueue,这里说的PriorityBlockingQueue其实是DelayedWorkQueue的简 ...

  5. 多服务器操作利器 - Polysh

    多台服务器下的痛苦人生 分布式架构下的系统,可以说每个服务都是分别部署在多台服务器上的,有的甚至还需要多机房,在这种架构下可以说可以很好的做到了易扩展.容灾等功能.推荐的服务部署为一服务多机器.一机器 ...

  6. JavaSE学习入门

    Java基础: 1.安装JDK1.7(JDK 包括JRE,Java工具包,Java的类库) 2.编写Hello,world 程序 public class Hello{ public static v ...

  7. SQL Count(*)函数,GROUP_By,Having的联合使用

    COUNT(*)  函数返回在给定的选择中被选的行数. 语法:SELECT  COUNT(*) FROM  table 使用:现在有一个表,名叫app_category,从Navicat中可以看到表中 ...

  8. 上班打卡--- 通过批处理命令执行jar文件来记录上班时间

    如果 一个程序员要记录自己上班工作时间的话 ,还需要靠手动去记录, 那就有点 不够范了, 程序员自然要有自己的极客范儿 , 下面就跟我一起来(zhuangbi); 先列一下整体的步骤: 1: 先做一个 ...

  9. mysql 系统性浅聊 myisam 存储引擎【原创】

    >>思维导图 >>介绍 mysql中的存储引擎都是以插件的形式存在,目前用的最多存储引擎就是innodb和myisam.MySQL5.5.5以后(包括5.5.5)默认使用Inn ...

  10. HDU1018-Big Number

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...