laravel框架的使用

laravel中的api资源
创建一个 Product 资源
API 资源是在 Laravel 中将你的模型以及模型集合转换为 JSON 的新特性。接下来让我们创建一个 Product 的资源。

php artisan make:resource Product

你可以在 app/Http/Resources 目录下看到你刚刚生成的 Product 资源

当然我们还需要 Product 的数据库迁移、模型和控制器。我们能用这个命令快速的创建这些。

 php artisan make:model Product -mc

打开database/migrations中会有product表的添加信息,打开修改up中的内容

		public function up()
		{
		    Schema::create('products', function (Blueprint $table) {
		        $table->increments('id');
		        $table->string('name');
		        $table->integer('price');
		        $table->timestamps();
		    });
		}

注意:看别人说的是这里的价格字段是整型的。 永远不要用浮点型存储你的价格数据!

到目前为止,我们已经有模型,控制器,数据库迁移以及用以转换模型和模型集合为 JSON 的资源类。那么接下来呢?

在这之前,什么是资源类?我们在 resources 文件夹中创建的 Product 类又是什么?一个资源类表示了单个模型转换为 JSON 的结构。

结合上面所阐述的,让我们来打开 Product.php 资源类文件。

这里有一个 toArray 方法,这个就是在我们发送响应时返回需要转换为 JSON 的属性数组的方法。

我们来修改它,让我们可以有更好的点子。

 	public function toArray($request)
	{
	    return [
	        'id' => $this->id,
	        'name' => $this->name,
	        'price' => $this->price,
	        'created_at' => $this->created_at,
	        'updated_at' => $this->updated_at,
	    ];
	}

使用 Product 资源
我们刚刚更改了 toArray 方法,让我们继续在我们的控制器中使用 product 资源。

product 控制器是看起来是这样的:

	<?php
	
	namespace App\Http\Controllers;
	
	use App\Product;
	use App\Http\Resources\Product as ProductResource;
	
	class ProductController extends Controller
	{
	    public function show ($id)
	    {
	        return new ProductResource(Product::find($id));
	    }
	}

为了转换 product ,我们仅仅在 product 资源类中传递了一个 product。

让我们创建一个 show 方法的路由,看一看结果。

打开 api.php 文件,在中间件外部创建这个路由。

Route::get(’/products/{id}’, ‘ProductController@show’);

现在,看看 create_at 和 updated_at 时间戳。如果你想要的是返回一个实际时间戳的字符串?那么你可以像这个例子中,强制类型转换为字符串:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'test' => 'This is just a test',
        'created_at' => (string)$this->created_at,
        'updated_at' => (string)$this->updated_at,
    ];
}

还有一种强制转换数据格式的方法,就是在model里面,运用 $casts将两个时间转为字串类型

class Products extends Model
{
   use SoftDeletes; // 开启软删除
    public $table = 'product';
    protected $fillable = ['name','test'];
    public $casts = [
        'created_at' => 'string',
        'updated_at' => 'string'
    ];
     protected $default = [
        'price' => '11111'
    ];
    protected $dispatchesEvents = [
        'created' => ProductCreatedEvent::class,
        'saved' => ProductCreatedEvent::class,
        'deleted' => ProductCreatedEvent::class,
];
public function __construct($attributes = [])
    {
        $attributes = array_merge($this->default, $attributes);

        parent::__construct($attributes);
    }
    public function user()
    {
        return $this->hasOne(User::class,'id','user_id');
    }
}

解释:1.model里面 public $table = ‘product’;这句的意思就是有时会报找不到Product这个类,这句是指定库中的这个表名,就不会报这个错误了。
2. protected $fillable = [‘name’,‘test’];这句是批量添加的字段,没有写price,那么添加或者编辑时就不会对price做任何改变,price字段就为空。
3. 这句use SoftDeletes; // 开启软删除,删除的这条记录仍存在,只不过delete_at里面会有值,在列表中也不会读出来,这是laravel框架封装好的。
4. 下面那个use方法是表与表的关联关系。
5. protected KaTeX parse error: Expected group after '_' at position 26: …ublic function _̲_construct(attributes = [])是添加默认值
6. protected $dispatchesEvents 是封装的事件类

Events 目录默认是不存在的,它会在你运行 Artisan 命令 event:generate 或 event:make 时生成。Events 目录存放了 事件类。可以使用事件来提醒应用其他部分发生了特定的操作,为应用提供了大量的灵活性和解耦。

转自链接:https://learnku.com/laravel/t/7528/use-the-api-resource-function-of-laravel-to-build-your-api

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值