[关闭]
@lxjwlt 2015-01-02T11:36:05.000000Z 字数 4607 阅读 1897

Laravel简介

Laravel是一款基于MVC设计模式的PHP框架,提供了一系列便捷的API接口,包括数据库、路由、表单验证等等,使PHP开发更为快速和优雅,一言以蔽:

Laravel为WEB艺术家而生!

安装

先保证你已经安装好了PHP,接下来,你可以直接参考官网的安装教程进行安装。

如果遇到网络问题,上述安装教程无法成功安装,你也可以先下载PHP包管理工具composer.phar,用PHP命令行运行安装:

php composer.phar

安装成功后,设置composer的环境变量,以便全局命令行调用,windows下的路径应该是:~\AppData\Roaming\Composer\vendor\bin;

最后通过composer下载Laravel所有依赖文件,运行:

composer create-project laravel/your_project_name --prefer-dist

等待所有文件下载成功,我们能看到项目文件夹中已经有了app、public等等文件夹,主要文件都放置在app/文件夹下,下面会介绍到。

路由

路由的设置都写在app/routers.php中,路由有两种,基于get请求和基于post请求的:

  1. Route::get('welcome', function() { return 'hello world by GET'; });
  2. Route::post('welcome', function() { return 'hello world by POST'; });

当然,我们也能实现支持所有请求动作的路由,无论GET还是POST:

  1. Route::any('welcome', function() { return 'hello world'; });

现在,我们访问/welcome时,页面会显示"hello world"。

路由命名

当路由名过长,而我们又需要频繁地获取它的路径时,我们可以为路由命名:

  1. Route::get('lxjwlt_home_page', array('as' => 'home', function() {
  2. return 'welcome to my home';
  3. }));

只有为路由命名后,我们才能够通过以下方式获取路由路径:

  1. Route::to('home');

视图

视图(view)提供表现层,单纯地提供界面效果,以便使视图代码和逻辑代码分离。

视图文件均放置在app/views内,视图代码以HTML的形式呈现,但与HTML不同的是,我们可以通过{{ }}插入PHP语句:

  1. <!-- IN app/views/demo.blade.php -->
  2. <html>
  3. <head></head>
  4. <body>
  5. <h1>{{'1+1='.(1 + 1)}}</h1>
  6. <b>{{$keyword or 'default value'}}</b>
  7. </body>
  8. </html>

我们可以通过路由请求可以返回该视图:

  1. Route::get('/', function() {
  2. return View::make('demo');
  3. });

blade模板

为了页面重复代码,我们通常会提取出页面中公共的部分,比如<header><footer>以及一些外部资源的引用,再针对不同页面进行相应的组合。

Laravel提供Blade模块引擎,方便我们实现模板继承和模板片段,要注意的是,所有这些模板都必须.blade.php结尾。

下面我们来实现一个页面layout模板,该模板会被应用到所有页面中:

  1. <!-- IN app/views/layout.blade.php -->
  2. <html>
  3. <body>
  4. @yield('content', 'Default content!')
  5. </body>
  6. </html>

上述代码中,@yield用于声明一个位置,用于插入内容。第一个参数是ID,第二个参数是默认内容,当该content位置为插入内容,则显示默认内容。

接下来我们要实现home页面,该页面继承layout模板:

  1. <!-- IN app/views/home.blade.php -->
  2. @extends('layout')
  3. @section('content')
  4. <h1>welcome to lxjwlt's home</h1>
  5. @stop

home页面继承layout模板,继承要用到关键字@extends。而@section则是用来定义content位置的内容。最终Blade引擎会将home页面渲染成:

  1. <html>
  2. <body>
  3. <h1>welcome to lxjwlt's home</h1>
  4. </body>
  5. </html>

能插入内容还不够,我们还需要满足以下条件:

下面我们就以home页面引用样式文件为例:

  1. <!-- IN app/views/layout.blade.php -->
  2. <html>
  3. <head>
  4. @section('CSS')
  5. <link rel="stylesheet" href="common.css" />
  6. @show
  7. </head>
  8. <body>
  9. @yield('content', 'Default content!')
  10. </body>
  11. </html>

我们在layout模板上引用了common.css,用@section@show括起来。注意是@show而不是@stop

现在,我们可以在home页面直接覆盖掉公共样式:

  1. @section('CSS')
  2. <link rel="stylesheet" href="home.css" />
  3. @stop

这样,home页面就只会引用home.css,而不会引用common.css。

当然,我们也可以采用以下写法,在不覆盖掉公共样式的同时,引用其他样式:

  1. @section('CSS')
  2. @parent
  3. <link rel="stylesheet" href="home.css" />
  4. @stop

@parent关键词会保留父模板中事先定义好的内容。上述代码会生成:

  1. <link rel="stylesheet" href="common.css" />
  2. <link rel="stylesheet" href="home.css" />

控制器

在Laravel中,我们能够在路由代码中处理数据,并插入到视图中,但我们不应该这么做,而是应该用到控制器,用控制器统一处理后台逻辑,比如登录注销,表单验证等等。

Laravel的控制器代码统一放在app/controllers文件夹下,所有控制器都必须继承BaseController。下面我们实现一个HomeController控制器:

  1. class HomeController extends BaseController {
  2. public function welcome() {
  3. $user = array('name' => 'lxjwlt', 'age' => '22');
  4. return View::make('home', array('user' => $user)); // 传入数据
  5. }
  6. }

该控制器中有个welcome方法,该方法会返回一个视图。下面,我们将路由和该控制器的welcome动作绑定起来:

  1. Route::get('home', 'HomeController@welcome');

现在,当我们访问/home时,home页面视图将显示出来。

模型

数据库中的每个表都对应一个模型,模型中定义一系列API接口,以便获取对应表中的数据。

Laravel中模型放在app/modules文件夹下,每个模型都必须继承Eloquent类。我们来实现users表的模型:

  1. class User extends Eloquent {
  2. static public function fetch_by_username($username) {
  3. // ...
  4. }
  5. }

我们定义了一个通过用户名来获取用户数据的方法,在任何地方我们都可以这样使用:

  1. User::fetch_by_username('lxjwlt');

数据迁移及数据填充

Laravel的数据迁移和填充系统可以重新创建数据库,方便数据库初始化。

可以想象一下,我们将项目文件夹复制到另一台主机上,该主机上没有项目的数据库,但我们只需要运行一条命令,整个数据库就能够重新创建出来,而且初始化数据也已经填充完成,这回非常的方便。

我们先创建一个迁移:

php artisan migrate:make create_users_table

所有的迁移都被存放在app/database/migrations文件夹下。该文件夹会自动生成CreateUsersTable类,其中包含了两个方法,up方法用于创建表,down方法用于删除表。

我们需要一张users表,可以这样写:

  1. class CreateUsersTable extends Migration {
  2. public function up() {
  3. Schema::create('users', function($table)
  4. {
  5. $table->increments('id'); // 自增
  6. $table->string('email')->unique();
  7. $table->string('password');
  8. $table->string('name')->unique();
  9. $table->timestamps(); // Laravel自带时间戳
  10. });
  11. }
  12. public function down() {
  13. Schema::drop('users');
  14. }
  15. }

有了迁移文件,我们可以运行以下命令,初始化数据库:

php artisan migrate

数据库初始化后,我们可能会需要事先插入一些数据,Laravel也提供了数据填充功能,设置文件统一放在app/database/seeds文件夹下。一个表对应一个文件,比如我们要为users表填充数据:

  1. class UsersTableSeeder extends Seeder {
  2. public function run()
  3. {
  4. DB::table('users')->delete();
  5. Users::create(array('name' => 'root', 'password' => '123'));
  6. Users::create(array('name' => 'lxjwlt', 'password' => '123'));
  7. Users::create(array('name' => 'john', 'password' => '123'));
  8. }
  9. }

在填充数据前,我们要告诉Laravel,该user表的存在,所以我们要在DatabaseSeeder类声明:

  1. class DatabaseSeeder extends Seeder {
  2. public function run()
  3. {
  4. Eloquent::unguard();
  5. $this->call('UsersTableSeeder');
  6. }
  7. }

现在,我们可以执行以下命令填充数据:

php artisan db:seed

我们也可以同时执行数据迁移和数据填充:

php artisan migrate:refresh --seed

资源文件引用

资源文件,比如JS脚本,CSS样式文件,图片资源等等,建议放在public文件夹下,这样,我们就可以用Laravel提供的url函数来获取资源的路径:

  1. <link href="{{url('common.css')}}" rel="stylesheet" />

参考

更多Laravel的使用方法,请参考Laravel 手册

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注