• 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数组增加一行:
           'BarryvdhLaravelIdeHelperIdeHelperServiceProvider',
        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对应的是IlluminateRoutingRouter,根据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文件,创建应用(IlluminateFoundationApplication)并检查环境
        3)调用framework/start.php,路径为vendorlaravelframeworksrcIlluminateFoundationstart.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这种方式,过滤器等。
      
  • 相关阅读:
    luogu2253 好一个一中腰鼓!
    luogu2948 滑雪课
    luogu1556 幸福的路
    luogu1900 自我数
    luogu1632 点的移动
    luogu1999 高维正方体
    树状数组模板
    杜教筛
    [比赛|考试] 9月第一周的考试
    历年NOIP真题总结
  • 原文地址:https://www.cnblogs.com/stone-fly/p/3976695.html
Copyright © 2020-2023  润新知