Laravel学习笔记(二)

    解决了类自动加载的问题,剩下的问题就是看文档了,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这种方式,过滤器等。
  
posted @ 2014-09-17 11:14  stone-fly  阅读(2254)  评论(4编辑  收藏  举报