PHP code example of mustafafares / laravel-selective-response

1. Go to this page and download the library: Download mustafafares/laravel-selective-response library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

mustafafares / laravel-selective-response example snippets




namespace App\Http\Resources;

use MustafaFares\SelectiveResponse\Http\Resources\BaseApiResource;

class UserResource extends BaseApiResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            'phone' => $this->phone,
            'address' => $this->address,
        ];
    }
}



namespace App\Http\Controllers\Api;

use App\Http\Resources\UserResource;
use App\Models\User;

class UserController extends Controller
{
    // Full response - returns all fields
    public function show($id)
    {
        $user = User::findOrFail($id);
        return new UserResource($user);
    }

    // Selective response - returns only selected fields
    public function summary($id)
    {
        $user = User::select('id', 'name', 'email')->findOrFail($id);
        return new UserResource($user);
        // Returns: {id, name, email} ✨
    }
}

// Resource (no changes needed!)
class UserResource extends BaseApiResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            'phone' => $this->phone,
        ];
    }
}

// Controller - Full response
$user = User::find($id);
return new UserResource($user);
// Returns: {id, name, email, phone}

// Controller - Selective response
$user = User::select('id', 'name')->find($id);
return new UserResource($user);
// Returns: {id, name}  ✨ Automatic!

class UserResource extends BaseApiResource
{
    protected $alwaysInclude = ['id'];

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

// Even with select('name'), 'id' is always 

// Option 1: In resource class
class AdminResource extends BaseApiResource
{
    protected $useSelectiveResponse = false;
}

// Option 2: In controller
return (new UserResource($user))->withoutSelectiveFiltering();

class UserResource extends BaseApiResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'posts' => PostResource::collection($this->whenLoaded('posts')),
        ];
    }
}

// Load relationship
User::select('id', 'name')->with('posts')->find($id);
// Returns: {id, name, posts: [...]}

public function summary($id)
{
    $user = User::select('name')->findOrFail($id);
    return (new UserResource($user))
        ->alwaysInclude(['id', 'created_at']);
}



return [
    // ... other config ...

    'extensions' => [
        \MustafaFares\SelectiveResponse\Extensions\SelectiveResponseExtension::class,
    ],
];

// Controller
$user = User::select('id', 'name', 'email')->findOrFail($id);
return new UserResource($user);

// Scramble docs show: {id, name, email, phone, address, ...} ❌

// Same controller code
$user = User::select('id', 'name', 'email')->findOrFail($id);
return new UserResource($user);

// Scramble docs show: {id, name, email} ✅

// config/selective-response.php
'scramble' => [
    'enabled' => false,
],



return [
    // Enable/disable selective filtering globally
    'enabled' => env('SELECTIVE_RESPONSE_ENABLED', true),

    // Fields that should always be BLE_ENABLED', true),

        'always_

public function index()
{
    $users = User::select('id', 'name', 'email')
        ->paginate(20);
    return UserResource::collection($users);
}

public function show($id)
{
    $user = User::with('posts', 'role')->findOrFail($id);
    return new UserResource($user);
}

public function search(Request $request)
{
    $fields = explode(',', $request->input('fields', 'id,name,email'));
    $users = User::select($fields)
        ->where('name', 'like', "%{$request->q}%")
        ->get();
    return UserResource::collection($users);
}

public function adminView($id)
{
    $user = User::select('id')->findOrFail($id);
    return (new UserResource($user))->withoutSelectiveFiltering();
}

class UserResource extends BaseApiResource
{
    protected function shouldIncludeKey(string $key, $value): bool
    {
        // Always ($key, $value);
    }
}

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'full_name' => $this->whenAttributeLoaded('name', 
            $this->first_name . ' ' . $this->last_name
        ),
    ];
}

use MustafaFares\SelectiveResponse\Http\Resources\BaseApiResource;
use Tests\TestCase;
use App\Models\User;

class SelectiveResponseTest extends TestCase
{
    public function test_selective_response()
    {
        $user = User::factory()->create();
        $selected = User::select('id', 'name')->find($user->id);
        $resource = new UserResource($selected);
        $data = $resource->toArray(request());

        $this->assertArrayHasKey('id', $data);
        $this->assertArrayHasKey('name', $data);
        $this->assertArrayNotHasKey('email', $data);
    }
}

// Before
class UserResource extends JsonResource

// After
class UserResource extends BaseApiResource

use MustafaFares\SelectiveResponse\Http\Resources\BaseApiResource;
bash
php artisan vendor:publish --tag=selective-response-config
bash
composer 
bash
php artisan vendor:publish --tag=scramble-config
bash
php artisan vendor:publish --tag=selective-response-config