рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рдЙрдиреНрдирдд рд╕рдВрд╕рд╛рдзрди рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реАред рднрд╛рдЧ 1. рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ

рдкрд░рд┐рдЪрдп


рд╣реИрд▓реЛ, рдкреНрд░рд┐рдп рдЦрд╛рдмрд░реЛрд╡рдЪрдиред
рдПрдкреАрдЖрдИ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рддрд░реАрдХреЗ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ред рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдкрд╣реБрдВрдЪ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕реА рд╕рдордп, рдЙрдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реАрдЖрд░рдпреВрдбреА рдкрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рдФрд░ рд▓рдЪреАрд▓реА рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╢рдВрдХреБ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд▓реЗрдЦреЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рдХрд┐рдпрд╛ рдЙрд╕рдХрд╛ рдХреБрдЫ рд╣рдж рддрдХ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред


рдореИрдВ рдЕрд▓рдЧ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ - рд╕рд╛рдордЧреНрд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдпрд╣ рдЖрд▓реЗрдЦ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╢реЗрдбреНрдпреВрд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╕рдм рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рднрд╛рдЧ 1. рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ


рддреЛ, рдХрд╛рд░реНрдп: рдХрдИ рдореЙрдбрд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдмрдврд╝ рдФрд░ рдШрдЯ рд╕рдХрддреА рд╣реИред
рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рднреВрдорд┐рдХрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
CRUD, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╛рд▓реЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдпрд╛рдд, рдирд┐рд░реНрдпрд╛рдд ) рдЬреИрд╕реА рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ ред
рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдХрд╛рдо (рдЕрдкрдиреЗ рдкреНрд░рд┐рдп рдХреЗ рд▓рд┐рдП) рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдбрд▓ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ред
рд▓реЗрдЦ рдПрдХ рдПрдкреАрдЖрдИ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рди рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред


рдирдореВрдирд╛


Post. ( ) app.
app/Models Posts. ( , -).
. :


    php artisan make:model Models/Post --api --migration
    php artisan migrate

: , . , .



PostController CRUD
Controller.
ModelController Controller , , PostController.
PostController тАФ import() export(Post $post).
, .



Laravel Illuminate\Foundation\Auth\Access\AuthorizesRequests.
App\Http\Controllers\Controller ModelController. Controller , .
authorizeResource($model).
, (Middleware) .
:


    can:viewAny,App\Models\Post
    can:view,post
    can:update,post

, , тАФ :


  1. viewAny view apiResource
  2. , тАФ .

:


. resourceAbilityMap() .


<?php
protected function resourceAbilityMap()
{
    return [
        'index' => 'viewAny',
        'show' => 'view',
        'create' => 'create',
        'store' => 'create',
        'edit' => 'update',
        'update' => 'update',
        'destroy' => 'delete',
    ];
}

. Laravel . , . index() , show(Post $post) . resourceMethodsWithoutModels()


<?php
protected function resourceMethodsWithoutModels()
{
    return ['index', 'create', 'store'];
}


(ModelController)

app/Http/Controllers ModelController. :


  • $guardedMethods ┬л ┬╗ => ┬л ┬╗.
    (Policy) , , (Gate). .
  • $methodsWithoutModels .
  • getModelClass() .
    .
  • authorizeResource($this->getModelClass()) . ( (Route), )
  • resourceAbilityMap() resourceMethodsWithoutModels() , , .

<?php

namespace App\Http\Controllers;

abstract class ModelController extends Controller
{
    /** @var array 'method' => 'policy'*/
    protected $guardedMethods = [];

    protected $methodsWithoutModels = [];

    protected abstract function getModelClass(): string;

    public function __construct()
    {
        $this->authorizeResource($this->getModelClass());
    }

    protected function resourceAbilityMap()
    {
        $base = parent::resourceAbilityMap();

        return array_merge($base, $this->guardedMethods);
    }

    protected function resourceMethodsWithoutModels()
    {
        $base = parent::resourceMethodsWithoutModels();

        return array_merge($base, $this->methodsWithoutModels);
    }
}

(PostController)

:


  • getModelClass() .
  • $methodsWithoutModels ┬л ┬╗ => ┬л ┬╗ . . , =. , , .
  • $methodsWithoutModels , . import
  • тАФ , . тАФ .

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends ModelController
{
    /** @var array 'method' => 'policy'*/
    protected $guardedMethods = [
        'export' => 'export',
        'import' => 'import',
    ];

    protected $methodsWithoutModels = ['import'];

    protected function getModelClass(): string
    {
        return Post::class;
    }

    public function index()
    { /**     */ }

    public function store(Request $request)
    { /**    */ }

    public function show(Post $post)
    { /**    */ }

    public function update(Request $request, Post $post)
    { /**    */ }

    public function destroy(Post $post)
    { /**    */ }

    public function import()
    { /**     */ }

    public function export(Post $post)
    { /**    */ }
}

(Routes)


.
'routes/api.php' ( 'routes/web.php', ) .
, , .
тАФ ( ) , Route::apiResource('posts', 'PostController'). Laravel. .
тАФ 'auth:api'. , .


<?php

use App\Http\Controllers\PostController;
use Illuminate\Support\Facades\Route;

Route::group(['middleware' => ['auth:api']], static function () {
    Route::post('posts/import', 'PostController@import')->name('posts.import');
    Route::get('posts/{post}/export', 'PostController@export')->name('posts.export');
    Route::apiResource('posts', 'PostController');
});

. :


php artisan route:list

тАФ ( )


+-----------------------+---------------------------+-------------------------------+
|URI                    |Action                     |Middleware                     |
+-----------------------+---------------------------+-------------------------------+
|api/posts              |...\PostController@index   |...,can:viewAny,App\Models\Post|
|api/posts              |...\PostController@store   |...,can:create,App\Models\Post |
|api/posts/import       |...\PostController@import  |...,can:import,App\Models\Post |
|api/posts/{post}       |...\PostController@show    |...,can:view,post              |
|api/posts/{post}       |...\PostController@update  |...,can:update,post            |
| рдПрдкреАрдЖрдИ / рдкреЛрд╕реНрдЯ / {рдкреЛрд╕реНрдЯ} | ... \ рдкреЛрд╕реНрдЯрдХрдВрдЯреНрд░реЛрд▓рд░ @ рдирд╖реНрдЯ | ...,: рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреЛрд╕реНрдЯ |
| рдПрдкреАрдЖрдИ / рдкреЛрд╕реНрдЯ / {рдкреЛрд╕реНрдЯ} / рдирд┐рд░реНрдпрд╛рдд | ... \ рдкреЛрд╕реНрдЯрдХрдВрдЯреНрд░реЛрд▓рд░ @ рдирд┐рд░реНрдпрд╛рдд | ..., рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдирд┐рд░реНрдпрд╛рдд, рдкреЛрд╕реНрдЯ
+ ----------------------- + ------------------------- - + ------------------------------- +



рдЕрдЧрд▓рд╛ рдЪрд░рдг рд▓рд┐рдВрдХ рдЧреЗрдЯ (рдЧреЗрдЯ) <-> рдиреАрддрд┐ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЕрдзрд┐рдХ ред


All Articles