解决了类自动加载的问题,剩下的问题就是看文档了,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学习笔记(二)
路由 HTTP方法:支持http1.1中所有类型传参方式,get,post,put,delete,options,patch Route::get($url,$callback); 路由参数: Rou ...
- laravel学习笔记二
代码编写提示工具
- Laravel学习笔记之Session源码解析(上)
说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
随机推荐
- 利用可变参数模拟Printf()函数实现一个my_print()函数和调用可变参数注意的陷阱!
可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈. 例如,对于函数: void test(char a ...
- Python 学习之路
这个是我学python以来,写的的第一个小游戏,写的不好 题目:石头剪刀布 主要有两个难度 在普通模式,电脑是随机出 在噩梦下,就是不管你出什么,电脑都会赢你,牛逼吧 #Author:陈浩彬 impo ...
- Database differential backup差异备份和还原
完整备份: 备份全部选中的文件和文件夹,并不依赖文件的存档属性来确定备份哪些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性),完全备份也叫完整备份. 差异 ...
- 《java.util.concurrent 包源码阅读》19 PriorityBlockingQueue
前面讲ScheduledThreadPoolExecutor曾经重点讲到了DelayedWorkQueue,这里说的PriorityBlockingQueue其实是DelayedWorkQueue的简 ...
- 多服务器操作利器 - Polysh
多台服务器下的痛苦人生 分布式架构下的系统,可以说每个服务都是分别部署在多台服务器上的,有的甚至还需要多机房,在这种架构下可以说可以很好的做到了易扩展.容灾等功能.推荐的服务部署为一服务多机器.一机器 ...
- JavaSE学习入门
Java基础: 1.安装JDK1.7(JDK 包括JRE,Java工具包,Java的类库) 2.编写Hello,world 程序 public class Hello{ public static v ...
- SQL Count(*)函数,GROUP_By,Having的联合使用
COUNT(*) 函数返回在给定的选择中被选的行数. 语法:SELECT COUNT(*) FROM table 使用:现在有一个表,名叫app_category,从Navicat中可以看到表中 ...
- 上班打卡--- 通过批处理命令执行jar文件来记录上班时间
如果 一个程序员要记录自己上班工作时间的话 ,还需要靠手动去记录, 那就有点 不够范了, 程序员自然要有自己的极客范儿 , 下面就跟我一起来(zhuangbi); 先列一下整体的步骤: 1: 先做一个 ...
- mysql 系统性浅聊 myisam 存储引擎【原创】
>>思维导图 >>介绍 mysql中的存储引擎都是以插件的形式存在,目前用的最多存储引擎就是innodb和myisam.MySQL5.5.5以后(包括5.5.5)默认使用Inn ...
- HDU1018-Big Number
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...