今天有时间打算学习一下Laravel。下面是一些简单的学习记录,希望对各位也有帮助。
基础设置
1.安装composer
之前就想抽时间学习Laravel,不过觉得安装有点复杂,我想很多人都有过这种想法。这里给大家推荐一个composer的中国镜像,速度真的不错。
安装Composer前确认你已经正确安装了PHP,打开控制台(Mac)执行php -v
查看是否输出正确的版本号。
打开控制台并执行以下命令安装最新版的Composer:
Composer的安装分局部安装和全局安装,这里只介绍局部安装。执行完上述命令后将会得到composer.phar
文件,将其复制到任意目录(比如项目的根目录下),然后执行php composer.phar
即可使用Composer了。
不要忘记要经常执行php composer.phar selfupdate
保持 Composer 一直是最新版本
2.Composer用法
实际上有两种方式启用本镜像服务:
* 系统全局配置:将配饰信息添加到Composer的全局配置文件config.json
。
* 单个项目配置:将配置信息添加到某个项目的composer.josn
文件中。
下面为大家介绍修改当前项目composer.json
配置文件(请原谅我比较懒,全局配置其实也不复杂):
打开控制台(Mac)并执行以下命令(确认你的composer.phar
已经复制到位):
3.安装Laravel
镜像配置完,在终端离切换到你想放置改网站的目录下,运行以下命令:
稍等片刻,目录下会出现一个叫learnlaravel5的文件夹,这样就完成安装了。
4.运行
这里我才用PHP内置的web服务器来驱动站点,运行以下命令:
这时候访问http://127.0.0.1:2024
就是这个样子的:
当然也可以使用Apache或者Nginx来驱动Laravel,这次就不在这里介绍了,有兴趣的朋友可以自己研究。
Auth系统
Laravel内置了非常完善的简单用户登录注册功能,适合一些需求不复杂的用户权限管理系统。这里其实涉及到trait这个PHP5.4+的新特性。
执行以下命令,激活这个功能:
访问http://127.0.0.1:2014/login
,会看见如下页面:
连接数据库
接下来需要连接数据库,请自行准备好MySQL服务。
learnlaravel5目录下已经有一个.env
文件,如果没有,可以复制一份.env.example
文件重命名为.env
,然后修改下面几行:
建议新建一个名为laravel5
数据库,并且使用root账户直接操作,简单快捷。
配置完数据库后,在登录界面填写任意邮箱和密码,点击Login,这时候会报错,单不用担心,因为我们确实没有创建users
表,下面让我们见识一下Laravel的另一个特性。
数据迁移
执行以下命令:
会出现以下提示信息:
说明数据迁移成功,现在在此访问http://127.0.0.1:2024/home
注册一个用户并完成登录。
其实migrate
就是PHP描述数据库构造,并且使用命令行一次性部署所有数据库结构。你可以在learnlaravel5/database/migrations
目录下找到上面截图的文件,一打开就知道它在干什么了。
ORM->Eloquent
Eloquent是Laravel中最强大的地方,但也是它最慢的地方,目前还是没能彻底解决。
下面我们使用Artisan工具新建Model类以及其附属的Migration和Seeder类。
运行以下命令:
执行成功后在app目录会生成一个Article.php的文件,这就是Artisan自动生成的Model文件:
使用Migration和Seeder
下面是用Artisan生成这个Model对应的Migration和Seeder:
成功会在learnlaravel5/database/migrations
生成名为*_create_artisan_table的文件,接下来我们修改up
函数:
这几行代码是Article对应的数据库表要创建的表的结构,下面我们来执行命令,让它变为MySQL中真实的数据表:
下面是用Artisan生成Seeder,Seeder主要解决在开发Web应用是手动向数据库插入数据这样的繁琐工作,同字面意思播种机还是挺配的。
然后在learnlaravel5/database/seeds
里面多了一个ArticleSeeder.php
文件,现在我们修改run函数:
接下来需要把ArticleSeeder注册到系统内,修改learnlaravel5/database/seeds/DatabaseSeeder.php
中的run函数:
由于database目录没有像app目录那样被composer注册为psr-4自动加载,采用的是psr-0 classmap 方式,所以我们还需要运行以下命令把ArticleSeeder.php
加入自动加载系统,避免找不到类的错误:
然后执行seed
Laravel的MVC架构
路由是很多有PHP框架的核心,路由承载的是URL代码片段的映射。Laravel路由中文文档。
Laravel 5 的路由在app/Http/routes.php
这个位置,打开这个文件:
中间的Route:auth()
就是Auth系统注入的路有配置。
基础陆游解释
上述代码中的前三行是闭包路由:
闭包路由是用闭包作为此条请求的响应代码,灵活方便,很多简单的操作可以直接在闭包里面解决。现在我们来实现输入当前服务器时间:
框架默认设置是UTF时间,这里修改为北京时间,在earnlaravel5/config/app.php
第55行处把timezone设置为上海:
然后访问http://127.0.0.1:2024/now
可以得出如下结果:
闭包路由虽然灵活性高,不过大多数场景下我们还是需要回归到MVC架构下:
这样代码的意思不能懂,就是当GET方法访问http://127.0.0.1:2024/home
的时候就调用HomeController控制器中的inde方法。同理你可以修改为Route::post('/home', 'HomeController@index');
,用POST来响应请求。
细心的你也许已经发现,这里才用的是控制器@方法
的形式。Laravel 的路由跟所有 PHP 框架的路由一样,都是用的最简单直接的 PHP 方式来调用控制器中的方法的:使用字符串初始化类得到对象,调用对象的指定方法,返回结果。下面简单介绍一下 Laravel 路由调用过程。
定为到learnlaravel5/app/Providers/RouteServiceProvider.php
文件最后的mapWebRoutes
方法,给所有路由统一加进了一个路由组,定义了一个命名空间和一个中间件:
往上看,你会发现命令空间的定义地方:
那么命名空间、类、方法是如何传递的?
现在让我们定为到learnlaravel5/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php
的dispatch
方法,在return
前增加一行var_dump($controller);
:
这样可以清晰看见加载情况了。
记住最后注释掉添加的var_dump($controller);
Laravel使用了完整的面向对象程序架构,对控制器的调用进行了超多层封装,所以最简单的探测方式就是手动抛出错误,这样就会完整地显示调用栈的情况。
现在让我们回到HomeController的index方法里,在return之前增加一行throw new \Exception('到此一游', 1);
,然后执行一下登录操作:
留意上图第三行,这里就是驱动了HomeController。