PHP code example of evanschleret / laravel-cors-resolver

1. Go to this page and download the library: Download evanschleret/laravel-cors-resolver 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/ */

    

evanschleret / laravel-cors-resolver example snippets


return [
    'paths' => ['api/*'],
    'resolver' => App\Cors\SiteCorsResolver::class,
    'failure_mode' => 'deny',
    'resolver_exception_mode' => 'deny',
    'failure_response' => null,
    'observability' => [
        'enabled' => true,
    ],
    'cache' => [
        'enabled' => true,
        'store' => null,
        'ttl' => 300,
        'namespace' => 'laravel-cors-resolver',
        'version' => 'v1',
        'tenant_parameter' => null,
        'lock' => [
            'enabled' => true,
            'ttl' => 10,
            'wait' => 5,
        ],
    ],
];

namespace App\Cors;

use EvanSchleret\LaravelCorsResolver\CorsPolicy;
use EvanSchleret\LaravelCorsResolver\CorsResolver;
use Illuminate\Http\Request;

final class SiteCorsResolver implements CorsResolver
{
    public function resolve(Request $request): CorsPolicy
    {
        $site = $request->route('site');

        if ($site === null) {
            return CorsPolicy::deny();
        }

        return CorsPolicy::make()
            ->allowOrigins($site->cors_origins)
            ->allowMethods(['POST', 'OPTIONS'])
            ->allowHeaders(['Content-Type', 'Accept'])
            ->exposeHeaders(['X-Request-Id'])
            ->maxAge(300)
            ->allowCredentials(false);
    }
}

use EvanSchleret\LaravelCorsResolver\Resolvers\ClosureCorsResolver;
use EvanSchleret\LaravelCorsResolver\Resolvers\RouteParameterCorsResolver;

$closureResolver = new ClosureCorsResolver(
    fn (Request $request): CorsPolicy => CorsPolicy::make()
        ->allowOrigins(['https://app.example.com'])
);

$siteResolver = new RouteParameterCorsResolver(
    'site',
    fn ($site, Request $request): CorsPolicy => CorsPolicy::make()
        ->allowOrigins($site->cors_origins)
);

use EvanSchleret\LaravelCorsResolver\Http\Middleware\ResolveCors;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withMiddleware(function (Middleware $middleware): void {
        $middleware->prepend(ResolveCors::class);
    })
    ->create();

Route::middleware('cors.resolve')->group(function (): void {
    Route::post('/api/resources/{resource}', StoreResource::class);
});

$context = CorsResolverContext::fromRequest(
    $request,
    SiteCorsResolver::class,
    config('cors-resolver.paths', [])
);

app(CorsPolicyCache::class)->forget($context);
app(CorsPolicyCache::class)->invalidateContext($context);

app(CorsPolicyCache::class)->invalidateResolver(SiteCorsResolver::class);
app(CorsPolicyCache::class)->invalidateTenant((string) $tenant->getRouteKey());
app(CorsPolicyCache::class)->invalidateTenant(
    (string) $tenant->getRouteKey(),
    SiteCorsResolver::class,
);