Laravel 学习笔记三: 创建简单的api工程
自己使用laravel框架创建api工程的一些记录
创建工程
composer create-project laravel/laravel LaravelApi
运行项目
php artisan serve //默认127.0.0.1, 8000端口
php artisan serve --host 192.168.20.77:8000 //修改自己的ip和端口号
这里使用了artisan(中文名:工匠)脚本里面的serve命令,意思是在php开发服务器上为应用程序提供服务,artisan还提供其它的命令,可以使用php artisan list
查看
服务正常启动后就可以通过http://127.0.0.1:8000
打开首页
关于APP_KEY
使用php artisan key:generate
会在配制文件.env
生成APP_KEY
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:sY6AGaeWSWsUJo6vBbE+z2/RuEPY92PO5JhYOsscp+E=
APP_DEBUG=true
APP_URL=http://localhost
这个key是传给 Illuminate\Encryption\Encrypter
用于加密数据的,比如加密cookie,看了一下Encrypter
的构造方法,key是外部传进来的
那key是怎么传给Encrypter的呢
注册 service providers
首先在 config\app.php
中注册EncryptionServiceProvider
<?php
return [
...
'key' => env('APP_KEY'),//读取APP_KEY
'providers' => [
...
Illuminate\Encryption\EncryptionServiceProvider::class,
...
]
Encrypter 初始化
public function register()
{
$this->registerEncrypter();
$this->registerOpisSecurityKey();
$this->registerSerializableClosureSecurityKey();
}
protected function registerEncrypter()
{
$this->app->singleton('encrypter', function ($app) {
$config = $app->make('config')->get('app');
//就是在这一步把key传进来的
return new Encrypter($this->parseKey($config), $config['cipher']);
});
}
使用命令创建模型,控制器,
php artisan make:model Product -mc
该命令会在
app\Http\Controllers
下创建控制器ProductController.php
app\Models
下创建模型Product.php
app\database\migrations
下创建2022_10_14_092952_create_products_table.php
,用于后面创建对应的表
创建相应的资源文件
php artisan make:resource Product
命令会在```app\Http\Resources下创建Product.php, 这个资源可以将你的模型以及模型集合转换为JSON
数据库相关配置
修改表字段
打开 app\database\migrations\2022_10_14_092952_create_products_table.php
修改里面的up方法
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('price');
//这个会自动创建 created_at和updated_at,类型为timestramp
$table->timestamps('');
});
}
使用命令创建表
php artisan migrate //migrate(中文:移动,迁徙)
这样就会自动生成products和对应的列
填充测试数据
使用下面命令创建配置文件
php artisan make:seeder ProductSeeder
会在app\database\seeders
生成ProductSeeder.php文件,修改里面的run方法
class ProductSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('products')->insert([
'id' => 1,
'name' => 'zw',
'price' => 123,
'created_at' => date("Y-m-d H:i:s"),
'updated_at' => date("Y-m-d H:i:s"),
]);
}
}
执行命令填充数据
php artisan db:seed --class=ProductSeeder
这里默认情况下, db:seed 命令将运行 Database\Seeders\DatabaseSeeder 类,这里指定运行ProductSeeder
配置路由
打开文件app\routes\api.php
,添加下面配置
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;
//这里有个问题,如果直接写'ProductController@show',会找不到这个类,所以写了完整的路径
Route::get('/products/{id}', 'App\Http\Controllers\ProductController@show');
修改控制器
打开app\Http\Resources\Product.php资源文件
,编辑如下:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class Product extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
//这个会以json的形式输出
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'created_at' => (String)$this->created_at,
'updated_at' => $this->updated_at,
];
}
}
打开文件 app\Http\Controllers\ProductController.php
, 修改如下:
<?php
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;
use App\Http\Resources\Product as ProductResource;
class ProductController extends Controller
{
public function show($id){
return new ProductResource(Product::find($id));
}
}
这里因为都用到了相同的Product名字,所以要使用use as命令做一下区分
效果
请求 http://127.0.0.1:8000/api/products/1
就会返回json数组
{"data":{"id":1,"name":"zw","price":123,"created_at":"2022-10-14 10:41:18","updated_at":"2022-10-14T10:41:18.000000Z"}}
总结
在这个简单的项目里面学习到知识做一下总结
- 创建laravel项目使用 composer create-project laravel/laravel 项目名
- 使用脚本artisan脚本命令配制项目,启动serve, 自动生成模型make:model, 数据库迁移migrate, 填充测试数据db:seed
参考
使用 Laravel 的 API 资源功能来构建你的 API
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: