ਇਸਦਾ ਮਤਲਬ ਇਹ ਹੈ ਕਿ ਜਦੋਂ ਉਪਭੋਗਤਾ (ਲਾਰਵੇਲ ਵਿਊ) ਸਰਵਰ (ਲਾਰਵੇਲ ਕੰਟਰੋਲਰ) ਨੂੰ ਬੇਨਤੀ ਕਰਦਾ ਹੈ, ਤਾਂ ਬੇਨਤੀ ਮਿਡਲਵੇਅਰ ਰਾਹੀਂ ਜਾਵੇਗੀ। ਇਸ ਤਰ੍ਹਾਂ ਮਿਡਲਵੇਅਰ ਜਾਂਚ ਕਰ ਸਕਦਾ ਹੈ ਕਿ ਕੀ ਬੇਨਤੀ ਪ੍ਰਮਾਣਿਤ ਹੈ ਜਾਂ ਨਹੀਂ:
Laravel ਤੁਹਾਨੂੰ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ defiਪ੍ਰਮਾਣਿਕਤਾ ਨੂੰ ਛੱਡ ਕੇ ਕਈ ਤਰ੍ਹਾਂ ਦੇ ਕੰਮ ਕਰਨ ਲਈ ਵਾਧੂ ਮਿਡਲਵੇਅਰ ਨੂੰ ਪੂਰਾ ਕਰੋ ਅਤੇ ਵਰਤੋ।
Laravel ਮਿਡਲਵੇਅਰ, ਜਿਵੇਂ ਕਿ ਪ੍ਰਮਾਣਿਕਤਾ ਅਤੇ CSRF ਸੁਰੱਖਿਆ, ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਸਥਿਤ ਹਨ ਐਪ/Http/ਮਿਡਲਵੇਅਰ .
ਇਸ ਲਈ ਅਸੀਂ ਕਹਿ ਸਕਦੇ ਹਾਂ ਕਿ ਮਿਡਲਵੇਅਰ ਇੱਕ http ਬੇਨਤੀ ਫਿਲਟਰ ਹੈ, ਜਿਸ ਦੁਆਰਾ ਸ਼ਰਤਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨਾ ਅਤੇ ਕਾਰਵਾਈਆਂ ਕਰਨਾ ਸੰਭਵ ਹੈ।
ਇੱਕ ਨਵਾਂ ਮਿਡਲਵੇਅਰ ਬਣਾਉਣ ਲਈ ਅਸੀਂ ਹੇਠ ਲਿਖੀ ਕਮਾਂਡ ਚਲਾਉਂਦੇ ਹਾਂ:
php artisan make:middleware <name-of-middleware>
ਅਸੀਂ ਬਣਾਉਂਦੇ ਹਾਂ middleware
ਅਤੇ ਅਸੀਂ ਇਸਨੂੰ ਕਹਿੰਦੇ ਹਾਂ CheckAge
, artisan
ਸਾਨੂੰ ਹੇਠ ਲਿਖੇ ਅਨੁਸਾਰ ਜਵਾਬ ਦੇਵੇਗਾ:
ਉੱਪਰ ਦਿੱਤੀ ਵਿੰਡੋ ਦਰਸਾਉਂਦੀ ਹੈ ਕਿ ਮਿਡਲਵੇਅਰ ਨਾਮ ਨਾਲ ਸਫਲਤਾਪੂਰਵਕ ਬਣਾਇਆ ਗਿਆ ਹੈ " ਚੈੱਕ ਏਜ ".
ਇਹ ਦੇਖਣ ਲਈ ਕਿ ਕੀ CheckAge ਮਿਡਲਵੇਅਰ ਬਣਾਇਆ ਗਿਆ ਹੈ ਜਾਂ ਨਹੀਂ, ਐਪ/Http/Middleware ਫੋਲਡਰ ਵਿੱਚ ਪ੍ਰੋਜੈਕਟ 'ਤੇ ਜਾਓ, ਅਤੇ ਤੁਸੀਂ ਨਵੀਂ ਬਣੀ ਫਾਈਲ ਦੇਖੋਗੇ।
ਨਵੀਂ ਬਣੀ ਫਾਈਲ ਵਿੱਚ ਹੇਠ ਲਿਖੇ ਕੋਡ ਹਨ
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
ਮਿਡਲਵੇਅਰ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ, ਸਾਨੂੰ ਇਸਨੂੰ ਰਜਿਸਟਰ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।
ਲਾਰਵੇਲ ਵਿੱਚ ਮਿਡਲਵੇਅਰ ਦੀਆਂ ਦੋ ਕਿਸਮਾਂ ਹਨ:
Middleware globale
Route Middleware
Il ਗਲੋਬਲ ਮਿਡਲਵੇਅਰ ਐਪਲੀਕੇਸ਼ਨ ਤੋਂ ਹਰ HTTP ਬੇਨਤੀ 'ਤੇ ਚਲਾਇਆ ਜਾਵੇਗਾ, ਜਦੋਂ ਕਿ ਰੂਟ ਮਿਡਲਵੇਅਰ ਨੂੰ ਇੱਕ ਖਾਸ ਮਾਰਗ ਲਈ ਨਿਰਧਾਰਤ ਕੀਤਾ ਜਾਵੇਗਾ। ਮਿਡਲਵੇਅਰ 'ਤੇ ਰਜਿਸਟਰ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ app/Http/Kernel.php. ਇਸ ਫਾਈਲ ਵਿੱਚ ਦੋ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਹਨ $midleware e $route ਮਿਡਲਵੇਅਰ . $middleware ਜਾਇਦਾਦ ਗਲੋਬਲ ਮਿਡਲਵੇਅਰ ਅਤੇ ਮਲਕੀਅਤ ਨੂੰ ਰਜਿਸਟਰ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ $route ਮਿਡਲਵੇਅਰ ਰੂਟ-ਵਿਸ਼ੇਸ਼ ਮਿਡਲਵੇਅਰ ਨੂੰ ਰਜਿਸਟਰ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।
ਗਲੋਬਲ ਮਿਡਲਵੇਅਰ ਨੂੰ ਰਜਿਸਟਰ ਕਰਨ ਲਈ, $middleware ਪ੍ਰਾਪਰਟੀ ਦੇ ਅੰਤ ਵਿੱਚ ਕਲਾਸ ਦੀ ਸੂਚੀ ਬਣਾਓ।
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
ਰੂਟ-ਵਿਸ਼ੇਸ਼ ਮਿਡਲਵੇਅਰ ਨੂੰ ਰਜਿਸਟਰ ਕਰਨ ਲਈ, $routeMiddleware ਵਿਸ਼ੇਸ਼ਤਾ ਵਿੱਚ ਕੁੰਜੀ ਅਤੇ ਮੁੱਲ ਸ਼ਾਮਲ ਕਰੋ।
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
ਅਸੀਂ ਬਣਾਇਆ ਹੈ ਚੈੱਕ ਏਜ ਪਿਛਲੀ ਉਦਾਹਰਨ ਵਿੱਚ. ਅਸੀਂ ਹੁਣ ਇਸਨੂੰ ਮਿਡਲਵੇਅਰ ਰੂਟ ਪ੍ਰਾਪਰਟੀ ਵਿੱਚ ਰਜਿਸਟਰ ਕਰ ਸਕਦੇ ਹਾਂ। ਅਜਿਹੀ ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਲਈ ਕੋਡ ਹੇਠਾਂ ਦਿਖਾਇਆ ਗਿਆ ਹੈ।
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
];
ਅਸੀਂ ਮਿਡਲਵੇਅਰ ਨਾਲ ਪੈਰਾਮੀਟਰ ਵੀ ਪਾਸ ਕਰ ਸਕਦੇ ਹਾਂ।
ਉਦਾਹਰਨ ਲਈ, ਜੇਕਰ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਵੱਖ-ਵੱਖ ਭੂਮਿਕਾਵਾਂ ਹਨ ਜਿਵੇਂ ਕਿ ਉਪਭੋਗਤਾ, ਪ੍ਰਸ਼ਾਸਕ, ਸੁਪਰ ਐਡਮਿਨ ਆਦਿ। ਅਤੇ ਤੁਸੀਂ ਭੂਮਿਕਾ ਦੇ ਅਧਾਰ ਤੇ ਕਾਰਵਾਈ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤੁਸੀਂ ਇਸਨੂੰ ਮਿਡਲਵੇਅਰ ਨਾਲ ਪੈਰਾਮੀਟਰ ਪਾਸ ਕਰਕੇ ਕਰ ਸਕਦੇ ਹੋ।
ਸਾਡੇ ਦੁਆਰਾ ਬਣਾਏ ਗਏ ਮਿਡਲਵੇਅਰ ਵਿੱਚ ਹੇਠਾਂ ਦਿੱਤੇ ਫੰਕਸ਼ਨ ਹਨ, ਅਤੇ ਅਸੀਂ ਆਰਗੂਮੈਂਟ ਤੋਂ ਬਾਅਦ ਕਸਟਮ ਆਰਗੂਮੈਂਟਸ ਪਾਸ ਕਰ ਸਕਦੇ ਹਾਂ $ਅਗਲਾ .
public function handle($request, Closure $next)
{
return $next($request);
}
ਹੁਣ ਰੋਲ ਪੈਰਾਮੀਟਰ ਨੂੰ ਇੱਕ ਨਵੇਂ ਮਿਡਲਵੇਅਰ ਵਿੱਚ ਸੈੱਟ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੋ ਅਸੀਂ ਸਕ੍ਰੈਚ ਤੋਂ ਬਣਾਉਣ ਜਾ ਰਹੇ ਹਾਂ, ਫਿਰ ਹੇਠ ਦਿੱਤੀ ਕਮਾਂਡ ਚਲਾ ਕੇ ਰੋਲ ਮਿਡਲਵੇਅਰ ਬਣਾਉਣ ਲਈ ਅੱਗੇ ਵਧਦੇ ਹਾਂ।
ਹੇਠ ਲਿਖੇ ਅਨੁਸਾਰ ਹੈਂਡਲ ਵਿਧੀ ਨੂੰ ਸੋਧੋ
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
ਅਸੀਂ ਪੈਰਾਮੀਟਰ ਜੋੜਿਆ ਹੈ $role
, ਅਤੇ ਵਿਧੀ ਦੇ ਅੰਦਰ ਲਾਈਨ echo
ਆਉਟਪੁੱਟ ਨੂੰ ਰੋਲ ਦਾ ਨਾਮ ਲਿਖਣ ਲਈ।
ਹੁਣ ਇੱਕ ਖਾਸ ਮਾਰਗ ਲਈ RoleMiddleware ਮਿਡਲਵੇਅਰ ਨੂੰ ਰਜਿਸਟਰ ਕਰੀਏ
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
];
ਹੁਣ ਪੈਰਾਮੀਟਰ ਨਾਲ ਮਿਡਲਵੇਅਰ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ, ਸਾਨੂੰ ਇੱਕ ਬੇਨਤੀ ਅਤੇ ਜਵਾਬ ਬਣਾਉਣ ਦੀ ਲੋੜ ਹੈ। ਜਵਾਬ ਦੀ ਨਕਲ ਕਰਨ ਲਈ ਆਓ ਕੰਟਰੋਲਰ ਬਣਾਈਏ ਜਿਸ ਨੂੰ ਅਸੀਂ TestController ਕਹਾਂਗੇ
php artisan make:controller TestController --plain
ਹੁਣੇ ਚਲਾਈ ਗਈ ਕਮਾਂਡ ਫੋਲਡਰ ਦੇ ਅੰਦਰ ਇੱਕ ਨਵਾਂ ਕੰਟਰੋਲਰ ਬਣਾਏਗੀ app/Http/TestController.php
, ਅਤੇ ਢੰਗ ਨੂੰ ਬਦਲੋ index
ਲਾਈਨ ਦੇ ਨਾਲ echo "<br>Test Controller.";
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller {
public function index() {
echo "<br>Test Controller.";
}
}
ਜਵਾਬ ਸਥਾਪਤ ਕਰਨ ਤੋਂ ਬਾਅਦ, ਅਸੀਂ ਫਾਈਲ ਨੂੰ ਸੰਪਾਦਿਤ ਕਰਕੇ ਬੇਨਤੀ ਬਣਾਉਂਦੇ ਹਾਂ routes.php
ਨੂੰ ਜੋੜ ਕੇ route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
ਇਸ ਮੌਕੇ 'ਤੇ ਅਸੀਂ URL 'ਤੇ ਜਾ ਕੇ ਉਦਾਹਰਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹਾਂ http://localhost:8000/role
ਅਤੇ ਬਰਾਊਜ਼ਰ ਵਿੱਚ ਅਸੀਂ ਦੋਨਾਂ ਨੂੰ ਵੇਖਾਂਗੇ echo
Role editor
Test Controller
Il terminable Middleware
ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ ਜਵਾਬ ਭੇਜੇ ਜਾਣ ਤੋਂ ਬਾਅਦ ਕੁਝ ਕੰਮ ਕਰਦਾ ਹੈ। ਇਹ ਵਿਧੀ ਨਾਲ ਮਿਡਲਵੇਅਰ ਬਣਾ ਕੇ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਮਿਡਲਵੇਅਰ ਵਿੱਚ ਬੰਦ ਕਰੋ। Il terminable Middleware
ਨਾਲ ਰਜਿਸਟਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ middleware
ਗਲੋਬਲ. ਢੰਗ terminate
ਦੋ ਦਲੀਲਾਂ ਪ੍ਰਾਪਤ ਕਰਨਗੇ $ਬੇਨਤੀ e $ਜਵਾਬ।
.ੰਗ Terminate
ਹੇਠ ਦਿੱਤੇ ਕੋਡ ਵਿੱਚ ਦਰਸਾਏ ਅਨੁਸਾਰ ਬਣਾਇਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ.
php artisan make:middleware TerminateMiddleware
ਇੱਕ ਵਾਰ ਮਿਡਲਵੇਅਰ ਬਣ ਜਾਂਦਾ ਹੈ app/Http/Middleware/TerminateMiddleware.php
ਆਓ ਕੋਡ ਨੂੰ ਹੇਠ ਲਿਖੇ ਅਨੁਸਾਰ ਸੋਧੀਏ
<?php
namespace App\Http\Middleware;
use Closure;
class TerminateMiddleware {
public function handle($request, Closure $next) {
echo "Executing statements of handle method of TerminateMiddleware.";
return $next($request);
}
public function terminate($request, $response) {
echo "<br>Executing statements of terminate method of TerminateMiddleware.";
}
}
ਇਸ ਮਾਮਲੇ ਵਿੱਚ ਸਾਡੇ ਕੋਲ ਇੱਕ ਤਰੀਕਾ ਹੈ handle
ਅਤੇ ਇੱਕ ਢੰਗ terminate
ਦੋ ਪੈਰਾਮੀਟਰਾਂ ਦੇ ਨਾਲ $request
e $response
.
ਹੁਣ ਮਿਡਲਵੇਅਰ ਨੂੰ ਰਜਿਸਟਰ ਕਰੀਏ
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
];
ਹੁਣ ਸਾਨੂੰ ਜਵਾਬ ਦੀ ਨਕਲ ਕਰਨ ਲਈ ਕੰਟਰੋਲਰ ਬਣਾਉਣ ਦੀ ਲੋੜ ਹੈ
php artisan make:controller XYZController --plain
ਕਲਾਸ ਦੀ ਸਮੱਗਰੀ ਨੂੰ ਸੋਧਣਾ
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
ਹੁਣ ਸਾਨੂੰ ਫਾਈਲ ਨੂੰ ਐਡਿਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ routes/web.php
ਬੇਨਤੀ ਨੂੰ ਸਰਗਰਮ ਕਰਨ ਲਈ ਲੋੜੀਂਦੇ ਰੂਟਾਂ ਨੂੰ ਜੋੜਨਾ
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
ਇਸ ਮੌਕੇ 'ਤੇ ਅਸੀਂ URL 'ਤੇ ਜਾ ਕੇ ਉਦਾਹਰਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹਾਂ http://localhost:8000/terminate
ਅਤੇ ਬਰਾਊਜ਼ਰ ਵਿੱਚ ਅਸੀਂ ਹੇਠ ਲਿਖੀਆਂ ਲਾਈਨਾਂ ਦੇਖਾਂਗੇ
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
ਤੁਹਾਨੂੰ ਇਹ ਵੀ ਪਸੰਦ ਹੋ ਸਕਦਾ ਹੈ:
ਜਲ ਸੈਨਾ ਖੇਤਰ ਇੱਕ ਸੱਚੀ ਗਲੋਬਲ ਆਰਥਿਕ ਸ਼ਕਤੀ ਹੈ, ਜਿਸ ਨੇ 150 ਬਿਲੀਅਨ ਮਾਰਕੀਟ ਵੱਲ ਨੈਵੀਗੇਟ ਕੀਤਾ ਹੈ...
ਪਿਛਲੇ ਸੋਮਵਾਰ, ਫਾਈਨੈਂਸ਼ੀਅਲ ਟਾਈਮਜ਼ ਨੇ ਓਪਨਏਆਈ ਨਾਲ ਇੱਕ ਸੌਦੇ ਦਾ ਐਲਾਨ ਕੀਤਾ। FT ਆਪਣੀ ਵਿਸ਼ਵ ਪੱਧਰੀ ਪੱਤਰਕਾਰੀ ਨੂੰ ਲਾਇਸੰਸ ਦਿੰਦਾ ਹੈ...
ਲੱਖਾਂ ਲੋਕ ਸਟ੍ਰੀਮਿੰਗ ਸੇਵਾਵਾਂ ਲਈ ਭੁਗਤਾਨ ਕਰਦੇ ਹਨ, ਮਹੀਨਾਵਾਰ ਗਾਹਕੀ ਫੀਸ ਅਦਾ ਕਰਦੇ ਹਨ। ਇਹ ਆਮ ਰਾਏ ਹੈ ਕਿ ਤੁਸੀਂ…
Veeam ਦੁਆਰਾ Coveware ਸਾਈਬਰ ਜ਼ਬਰਦਸਤੀ ਘਟਨਾ ਪ੍ਰਤੀਕਿਰਿਆ ਸੇਵਾਵਾਂ ਪ੍ਰਦਾਨ ਕਰਨਾ ਜਾਰੀ ਰੱਖੇਗਾ। ਕੋਵਵੇਅਰ ਫੋਰੈਂਸਿਕ ਅਤੇ ਉਪਚਾਰ ਸਮਰੱਥਾਵਾਂ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰੇਗਾ...