最近打算找工作,所以主要上手一下一点主流的框架。
#先用composer安装一下laravel
composer create-project laravel/laravel newlaravel
#安装完基本上访问public底下的index.php就可以了
mysql5.7以下的会报错
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique (email))
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
修改也不难,找到app\Providers\AppServiceProvider.php,
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
特性
1. migration 数据库迁移 相当于数据库的版本控制
composer make:migration create_articles_table
#运行后会在database/migrations底下生成一个带时间戳的迁移的php代码,然后根据自己需求再添油加醋
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();
});
}
#然后运行迁移
php artisan migrate
#若要回滚最后一次迁移,可以使用 rollback 命令。此命令将回滚最后一次「迁移」,其中可能包含多个迁移文件:
php artisan migrate:rollback
#删除所有表 & 迁移
php artisan migrate:fresh
#激活户登录注册功能
php artisan make:auth
然后配置数据库,在根目录底下的.env
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel5
DB_USERNAME=root
DB_PASSWORD=password
然后是模型
a. Eloquent 是什么
Eloquent 是 Laravel 内置的 ORM 系统,我们的 Model 类将继承自 Eloquent 提供的 Model 类,然后,就天生具备了数十个异常强大的函数,从此想干啥事儿都是一行代码就搞定。经过了三年多的大规模使用,我发现 Eloquent 另辟蹊径采用和 Java 技术完全不同的思路解决了多人开发耦合过重的问题:数据库相关操作全部用一句话解决,Model 中不写共用函数,大幅降低了 bug 几率。什么?你说性能?软件工程研究的对象是人,性能的优先级比代码格式规范都低好嘛。我时刻谨记:代码是写给人看的,只是恰好能运行。
php artisan make:model Article
命令行生成模型
Seeder 是我们接触到的一个新概念,字面意思为播种机。Seeder 解决的是我们在开发 web 应用的时候,需要手动向数据库中填入假数据的繁琐低效问题。
php artisan make:seeder ArticleSeeder
然后修改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,
]);
}
}
然后修改database/seeds/DatabaseSeeder.php的run方法
public function run()
{
$this->call(ArticleSeeder::class);
}
然后执行composer dump-autoload,php artisan db:seed,应该articles数据表里面就多了10条数据,
控制器@方法 路由 HomeController@index
接下来要用路由、MVC、Eloquent ORM 和 blade 视图系统搭建一个博客系统。
blade 浅析
blade 引擎会对视图文件进行预处理,帮我们简化一些重复性很高的 echo、foreach 等 PHP 代码。blade 还提供了一个灵活强大的视图组织系统。打开 home.blade.php:
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Dashboard</div>
<div class="panel-body">
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
You are logged in!
</div>
</div>
</div>
</div>
</div>
@endsection
@extends(‘layouts.app’)
resources/views/layouts/app.blade.php 。这个函数还隐含了一个小知识:在使用名称查找视图的时候,可以使用 . 来代替 / 或 \。
@Section(‘content’) … @endsection
这两个标识符之间的代码,会被放到基视图的 @yield(‘content’) 中进行输出。
既然 Controller – View 的架构已经运行,下一步就是引入 Model 了。Laravel 中向视图传数据非常简单:
public function index()
{
return view('home')->withArticles(\App\Article::all());
}
\App\Article::all() 是采用绝对命名空间方式对 Article 类的调用。
withArticles 是我定义的方法,Laravel 并不提供,这也是 Laravel 优雅的一个表现:Laravel View 采用 __call 来 handle 对未定义 function 的调用,其作用很简单:给视图系统注入一个名为 $articles 的变量,这段代码等价于 ->with(‘articles’, \App\Article::all())。
展开讲一下,->withFooBar(100) 等价于 ->with(‘foo_bar’, 100),即驼峰变量会被完全转换为蛇形变量。