Laravel系列⼊门教程(⼀)
热烈庆祝 Laravel 5.5 LTS 发布!实际上 Laravel 上⼀个 LTS 选择 5.1 是⾮常不明智的,因为 5.2 增加了许许多多优秀的特性。现在好了,⼤家都⽤最新的长期⽀持版本 5.5 吧!
Laravel 5.5 中⽂⽂档:
默认条件
你应该懂得 PHP ⽹站运⾏的基础知识,并且拥有⼀个完善的开发环境。跟随本教程⾛完⼀遍,你将会得到⼀个基础的包含登录、后台编辑、前台评论的简单 blog 系统。
Tips
1. 环境要求:PHP 7.0+,MySQL 5.1+
2. 本教程不推荐完全不懂 PHP 与 MVC 编程的⼈学习,Laravel 的学习曲线不仅仅是陡峭,⽽且耗时很长,请先做好⼼理准备。
3. 这不是 “⼀步⼀步跟我做” 教程。本教程需要你付出⼀定的⼼智去解决⼀些或⼤或⼩的隐藏任务,以达到真正理解 Laravel 运⾏逻辑的
⽬的。
4. 我使⽤ Safari 截图是为了好看,你们在开发时记得选择 Chrome 哦~
开始学习
1. 安装
许多⼈被拦在了学习 Laravel 的第⼀步:安装。并不是因为安装有多复杂,⽽是因为【众所周知的原因】。在此我推荐⼀个 composer 全量中国镜像:。启⽤ Composer 镜像服务作为本教程的第⼀项⼩作业请⾃⾏完成哦。
镜像配置完成后,在终端(Terminal 或 CMD)⾥切换到你想要放置该⽹站的⽬录下(如 C:\wwwroot、/Library/WebServer/Documents/、/var/www/html、/etc/nginx/html 等),运⾏命令:
composer create-project laravel/laravel learnlaravel5 ^5.5
然后,稍等⽚刻,当前⽬录下就会出现⼀个叫 learnlaravel5 的⽂件夹,安装完成啦~
2. 运⾏
为了尽可能地减缓学习曲线,推荐⼤家使⽤ PHP 内置 web server 驱动我们的⽹站。运⾏以下命令:
cd learnlaravel5/public
php -S 0.0.0.0:1024
这时候访问127.0.0.1:1024就是这个样⼦的:
我在本地 hosts 中绑定了 fuck.io 到 127.0.0.1,所以截图中我的域名是 fuck.io ⽽不是 127.0.0.1,其实他们是完全等价的。跟过去⼏年⽐,有⼀件⼤快⼈⼼的⼤好事,leapis⽹站已经转移到了墙内,不会再“⽩屏”了。
⾄于为什么选择 1024 端⼝?因为他是 *UNIX 系统动态端⼝的开始,是我们不需要 root 权限就可以随意监听的数值最⼩的端⼝。
另外,如果你不熟悉 PHP 运⾏环境搭建的话不要轻易尝试使⽤ Apache 或 Nginx 驱动 Laravel,特别是在开启了 SELinux 的 Linux 系统上跑这俩货。关于 Laravel 在 Linux 上部署的⼤坑,我可能要单写⼀篇长⽂分享给宝宝们。(说了⼀年了也没见写呀)
3. 体验⽜逼闪闪的 Auth 系统
Laravel 利⽤ PHP5.4 的新特性内置了⾮常完善好⽤的简单⽤户登录注册功能,适合⼀些不需要复杂⽤户权限管理的系统,例如公司内部⽤的简单管理系统。
激活这个功能⾮常容易,运⾏以下命令:
php artisan make:auth
访问fuck.io:1024/login,看到以下页⾯:
4. 连接数据库
接下来我们要连接数据库了,请⾃⾏准备好 MySQL 服务哦。
a. 修改配置
不出意外的话,learnlaravel5 ⽬录下已经有了⼀个 .env ⽂件,如果没有,可以复制⼀份 .ample ⽂件重命名成 .env,修改下⾯⼏⾏的值:
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel5
DB_USERNAME=root
DB_PASSWORD=password
推荐新建⼀个名为 laravel5 的数据库(编码设置为 utf8mb4),并且使⽤ root 账户直接操作,降低学习数据库的成本。
数据库配置好之后,在登录界⾯填写任意邮箱和密码,点击 Login,你应该会得到以下画⾯:
它说 users 表不存在,接下来我们将见识 Laravel 另外⼀个实⽤特性。
tip:如果你下载了我的⽰例代码,默认是跑不起来的,还需要⽣成 .env,运⾏ composer update 填充 vendor ⽂件夹等操作,如果部署在 Linux 上,⽤的 Apache 或 Nginx,还需要设置⽂件夹权限:chmod 777 -R storage bootstrap/cache
b. 进⾏数据库迁移(migration)
运⾏命令:
php artisan migrate
我们得到了如下结果:
» php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
数据库迁移成功!赶快打开点击右上⾓的注册按钮注册⼀个⽤户试试吧~
下图是本宝宝注册了⼀个 username 为 1 ⽤户:
c. migration 是啥?
打开learnlaravel5/database/migrations/2014_10_12_000000_create_users_table.php⽂件,你肯定能⼀眼看出它的作⽤:⽤ PHP 描述数据库构造,并且使⽤命令⾏⼀次性部署所有数据库结构。
5. 使⽤ Laravel 的“葵花宝典”:Eloquent
Eloquent 是 Laravel 的 ORM,是 Laravel 系统中最强⼤的地⽅,没有之⼀。当初 Laravel 作者在开发第⼀版的时候花了整整三分之⼀的时间才搞出来 Eloquent。当然,“欲练此功,必先⾃宫”,Eloquent 也是 Laravel 中最慢的地⽅,迄今⽆法解决。(路由、⾃动载⼊、配置分散、视图引发的性能问题都通过缓存⼏乎彻底解决了,Composer Autoload 巨量的性能消耗也被 PHP7 ⼿起⼑落解决了)
当然,我们还是要承袭第⼀版教程中对 Eloquent ORM 的描述:鹅妹⼦英!
如果你想深⼊地了解 Eloquent,可以阅读系列⽂章:
a. Eloquent 是什么
Eloquent 是 Laravel 内置的 ORM 系统,我们的 Model 类将继承⾃ Eloquent 提供的 Model 类,然后,就天⽣具备了数⼗个异常强⼤的函数,从此想⼲啥事⼉都是⼀⾏代码就搞定。
经过了三年多的⼤规模使⽤,我发现 Eloquent 另辟蹊径采⽤和 Java 技术完全不同的思路解决了多⼈开发耦合过重的问题:数据库相关操作全部⽤⼀句话解决,Model 中不写共⽤函数,⼤幅降低了 bug ⼏率。什么?你说性能?软件⼯程研究的对象是⼈,性能的优先级⽐代码格式规范都低好嘛。我时刻谨记:代码是写给⼈看的,只是恰好能运⾏。
b. 怎么⽤?
我们使⽤ Artisan ⼯具新建 Model 类及其附属的 Migration 和 Seeder(数据填充)类。
运⾏以下命令:
php artisan make:model Article
去看看你的 app ⽬录,下⾯是不是多了⼀个 Article.php ⽂件?那就是 Artisan 帮我们⽣成的 Model ⽂件:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
//
}
如此简洁有⼒的代码,隐藏了背后极⾼的难度和巨⼤的复杂度,让我们闭上眼睛,静静地感受 Laravel 的优雅吧 (~ ̄▽ ̄)~
下⾯是⼏个简单的例⼦:
到 id 为 2 的⽂章打印其标题
$article = Article::find(2);
echo $article->title;
查标题为“我是标题”的⽂章,并打印 id
$article = Article::where('title', '我是标题')->first();
echo $article->id;
查询出所有⽂章并循环打印出所有标题
$articles = Article::all(); // 此处得到的 $articles 是⼀个对象集合,可以在后⾯加上 '->toArray()' 变成多维数组。
foreach ($articles as $article) {
echo $article->title;
}
查 id 在 10~20 之间的所有⽂章并打印所有标题
$articles = Article::where('id', '>', 10)->where('id', '<', 20)->get();
foreach ($articles as $article) {
echo $article->title;
}
查询出所有⽂章并循环打印出所有标题,按照 updated_at 倒序排序
$articles = Article::where('id', '>', 10)->where('id', '<', 20)->orderBy('updated_at', 'desc')->get();
foreach ($articles as $article) {
echo $article->title;
}
6. 使⽤ Migration 和 Seeder
接下来我们⽣成对应 Article 这个 Model 的 Migration 和 Seeder。
a. 使⽤ artisan ⽣成 Migration
在 learnlaravel5 ⽬录下运⾏命令:
php artisan make:migration create_articles_table
成功之后打开learnlaravel5/database/migrations,你会发现有⼀个名为 2*****_create_articles_table 的⽂件被创建了。我们修改他的 up 函数为:public function up()
{
Schema::create('articles', function (Blueprint $table)
{
$table->increments('id');
$table->string('title');
$table->text('body')->nullable();
$table->integer('user_id');
$table->timestamps();
});
}
这⼏⾏代码描述的是 Article 对应的数据库中那张表的结构。Laravel Model 默认的表名是这个英⽂单词的复数形式,在这⾥,就是articles。接下来让我们把 PHP 代码变成真实的 MySQL 中的数据表,运⾏命令:
php artisan migrate
执⾏成功后,articles 表已经出现在数据库⾥了:
上图中的软件叫 Sequel Pro,是⼀个开源的 MAC 下 MySQL GUI 管理⼯具,超好⽤,推荐给⽤ MAC 的同学。
b. 使⽤ artisan ⽣成 Seeder
Seeder 是我们接触到的⼀个新概念,字⾯意思为播种机。Seeder 解决的是我们在开发 web 应⽤的时候,需要⼿动向数据库中填⼊假数据的繁琐低效问题。
运⾏以下命令创建 Seeder ⽂件:
php artisan make:seeder ArticleSeeder
怎么设置文件夹权限我们会发现learnlaravel5/database/seeds⾥多了⼀个⽂件ArticleSeeder.php,修改此⽂件中的 run 函数为:
public function run()
{
DB::table('articles')->delete();
for ($i=0; $i < 10; $i++) {
\App\Article::create([
'title' => 'Title '.$i,
'body' => 'Body '.$i,
'user_id' => 1,
]);
}
}
上⾯代码中的\App\Article为命名空间绝对引⽤。如果你对命名空间还不熟悉,可以读⼀下,很容易理解的。
接下来我们把 ArticleSeeder 注册到系统内。修改learnlaravel5/database/seeds/DatabaseSeeder.php中的 run 函数为:
public function run()
{
$this->call(ArticleSeeder::class);
}
由于 database ⽬录没有像 app ⽬录那样被 composer 注册为 psr-4 ⾃动加载,采⽤的是,所以我们还需要运⾏以下命令
把ArticleSeeder.php加⼊⾃动加载系统,避免不到类的错误:
composer dump-autoload
然后执⾏ seed:
php artisan db:seed
你应该得到如下结果:
» php artisan db:seed
Seeding: ArticleSeeder
这时候刷新⼀下数据库中的 articles 表,会发现已经被插⼊了 10 ⾏假数据:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论