Php 拉威尔API多级

Php 拉威尔API多级,php,laravel,rest,api,Php,Laravel,Rest,Api,我遵循了本教程: 我想为以下类型的soundbox应用程序创建一个API: / api / v1 / Apps -> list of apps / api / v1 / Apps / 1 /category -> list of category of app 1 / api / v1 / Apps / 1/category/1/sounds -> list of components of category 1 of app 1 你有做这个的教程吗? 或者如何调整我的路线文

我遵循了本教程:

我想为以下类型的soundbox应用程序创建一个API:

/ api / v1 / Apps -> list of apps
/ api / v1 / Apps / 1 /category -> list of category of app 1
/ api / v1 / Apps / 1/category/1/sounds -> list of components of category 1 of app 1
你有做这个的教程吗? 或者如何调整我的路线文件?我有3个控制器吗

--------------编辑------------

我创建了模型和控制器:

class App extends Model{
    protected $fillable = ['title'];
}

class Category extends Model{
    protected $fillable = ['name'];
}
控制器:

<?php
namespace App\Http\Controllers;
use App\App;
use Illuminate\Http\Request;

class AppController extends Controller{

public function index(){
    return App::all();
}

public function show($id){
    return App::find($id);
}
}

<?php
namespace App\Http\Controllers;
use App\Category;
use App\App;
use Illuminate\Http\Request;

class CategoryController extends Controller{

public function index(App $app){
    return App::find($app);
}

public function show(App $app, Category $category){
    //
}
}
所以我调用url:/api/v1/App

结果:[{“id”:1,“title”:“Movies”,“created_at:null”,“updated_at:null},{“id”:2,“title”:“football”,“created_at:null”,“updated_at:null}]

但当我调用url:/api/v1/App/2/category时,我不明白这是如何工作的


在CategoryController中。

您可以使用laravel的嵌套资源路由进行此操作,是的,每个实体类型都有一个资源丰富的控制器。在生成控制器时指定
--parent
标志,以便将相应的模型注入控制器方法

php artisan make:controller --resource --model Category CategoryController
php artisan make:controller --resource --parent Category --model App AppController
编辑:如果您没有设置身份验证,那么您可能只想公开您的
索引
显示
方法

演示存储库:

路线 模型 迁移 控制器
您可以为此使用laravel的嵌套资源路由,是的,每个实体类型都有一个资源丰富的控制器。在生成控制器时指定
--parent
标志,以便将相应的模型注入控制器方法

php artisan make:controller --resource --model Category CategoryController
php artisan make:controller --resource --parent Category --model App AppController
编辑:如果您没有设置身份验证,那么您可能只想公开您的
索引
显示
方法

演示存储库:

路线 模型 迁移 控制器
使用以下路线结构可能更直观:
/api/v1/类别
->类别列表,
/api/v1/categories/1/产品
-类别1的产品列表,
/api/v1/categories/1/products/1/components
->1类产品1的组件列表。使用以下路线结构可能更直观:
/api/v1/categories
->类别列表,
/api/v1/categories/1/products
-1类产品列表,
/api/v1/categories/1/products/1/components
->1类产品1的组件列表。如果我不想设置身份验证,是否需要使用“中间件”=>“auth:api”?@kingramizy如果您不设置身份验证,那么你可能只想公开你的索引和显示方法。@kingramizy我已经为你更新了我的答案,提供了一个完整的演示库。谢谢你的帮助,我只是把我的代码放在git上:事实上,它的应用程序是类别的父级。而且它不适用于:/api/v1/apps/2/categories/为什么类别会属于某个应用程序?我认为应用程序应该属于一个类别。否?如果我不想设置身份验证,是否需要使用“middleware”=>“auth:api”?@kingramizy如果你不设置身份验证,那么你可能只想公开你的索引和显示方法。@kingramizy我已经为你更新了答案,提供了一个完整的演示库。谢谢你的帮助,我只是把我的代码放在git上:事实上,它的应用程序是类别的父级。而且它不适用于:/api/v1/apps/2/categories/为什么类别会属于某个应用程序?我认为应用程序应该属于一个类别。不
php artisan make:controller --resource --model Category CategoryController
php artisan make:controller --resource --parent Category --model App AppController
Route::group(['prefix' => 'v1'], function() {
    Route::resource('categories', 'CategoryController', ['only' => ['index', 'show']]);
    Route::resource('categories.apps', 'AppController', ['only' => ['index', 'show']]);
});
+----------+-----------------------------------------+-----------------------+-----------------------------------------------+------------+
| Method   | URI                                     | Name                  | Action                                        | Middleware |
+----------+-----------------------------------------+-----------------------+-----------------------------------------------+------------+
| GET|HEAD | api/v1/categories                       | categories.index      | App\Http\Controllers\CategoryController@index | api        |
| GET|HEAD | api/v1/categories/{category}            | categories.show       | App\Http\Controllers\CategoryController@show  | api        |
| GET|HEAD | api/v1/categories/{category}/apps       | categories.apps.index | App\Http\Controllers\AppController@index      | api        |
| GET|HEAD | api/v1/categories/{category}/apps/{app} | categories.apps.show  | App\Http\Controllers\AppController@show       | api        |
+----------+-----------------------------------------+-----------------------+-----------------------------------------------+------------+
class Category extends Model
{
    protected $fillable = [
        'name',
    ];

    public function apps()
    {
        return $this->hasMany(App::class);
    }
}

class App extends Model
{
    protected $fillable = [
        'title',
    ];

    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}
Schema::create('categories', function (Blueprint $table) {
    $table->increments('id');
    $table->timestamps();
    $table->string('name')->unique();
});

Schema::create('apps', function (Blueprint $table) {
    $table->increments('id');
    $table->timestamps();
    $table->string('title');

    $table->integer('category_id')->unsigned();
    $table->foreign('category_id')
        ->references('id')
        ->on('categories');
});
class CategoryController extends Controller
{
    public function index()
    {
        return Category::all();
    }
    public function show(Category $category)
    {
        return $category;
    }
}

class AppController extends Controller
{
    public function index(Category $category)
    {
        return $category->apps()->get();
    }
    public function show(Category $category, App $app)
    {
        return $app;
    }
}