A package of helper classes for working with web components in Yii2.
Run
php composer.phar require mspirkov/yii2-webor add
"mspirkov/yii2-web": "^0.3"to the require section of your composer.json file.
A utility class for managing cookies.
This class encapsulates the logic for adding, removing, checking existence, and retrieving cookies, using the \yii\web\Request
and \yii\web\Response objects. It simplifies working with cookies by abstracting implementation details and providing more
convenient methods.
It contains the following methods:
has- checks if a cookie with the specified name exists.get- returns the cookie with the specified name.add- adds a cookie to the response.remove- removes a cookie.removeAll- removes all cookies.
class CookieManager extends \MSpirkov\Yii2\Web\CookieManager
{
public function __construct()
{
parent::__construct(
Instance::ensure('request', Request::class),
Instance::ensure('response', Response::class),
);
}
}class ExampleService
{
public function __construct(
private readonly CookieManager $cookieManager,
) {}
public function addCookie(): void
{
$this->cookieManager->add([
'name' => 'someCookieName',
'value' => 'someCookieValue',
]);
}
}A trait that extends the basic functionality of the \yii\helpers\Html helper.
Usage example:
use MSpirkov\Yii2\Web\HtmlTrait;
class Html extends \yii\helpers\Html
{
use HtmlTrait;
}You can also use this trait with other helpers that extends \yii\helpers\Html. For example:
use MSpirkov\Yii2\Web\HtmlTrait;
class Html extends \yii\bootstrap5\Html
{
use HtmlTrait;
}Сreates a form as a single button with hidden inputs. This can be useful when you need to perform an action when you click a button, such as deleting an item. This allows you to easily perform a request without manually creating a form, hidden inputs, etc.
Usage example:
<?= Html::singleButtonForm(['product/delete'], ['id' => $product->id], 'Delete'); ?>A wrapper for \yii\web\Request for easier handling of GET and POST parameters.
Important
All parameter retrieval methods also allow you to mark parameters as required using the $required parameter.
It contains the following methods:
getGetInt- gets the value of a GET parameter by its name and tries to convert it to an integer.getGetFloat- gets the value of the GET parameter by its name and tries to convert it to a floating-point number.getGetBool- gets the value of the GET parameter by its name and tries to convert it to a boolean.getGetString- gets the value of the GET parameter by its name and tries to convert it to a string.getGetArray- gets the value of the GET parameter by its name and tries to convert it to an array.getPostInt- gets the value of a POST parameter by its name and tries to convert it to an integer.getPostFloat- gets the value of the POST parameter by its name and tries to convert it to a floating-point number.getPostBool- gets the value of the POST parameter by its name and tries to convert it to a boolean.getPostString- gets the value of the POST parameter by its name and tries to convert it to a string.getPostArray- gets the value of the POST parameter by its name and checks that the value is an array.
First, you need to replace the request component in the configuration:
use MSpirkov\Yii2\Web\Request;
return [
...
'components' => [
'request' => [
'class' => Request::class,
...
],
...
],
];You also need to specify this class in __autocomplete.php so that the IDE knows which class to use:
<?php
use yii\BaseYii;
use yii\web\Application;
use MSpirkov\Yii2\Web\Request;
class Yii extends BaseYii
{
/** @var __Application */
public static $app;
}
/**
* @property-read Request $request
*/
class __Application extends Application {}I also recommend that you create your own basic controller and specify Request there:
use MSpirkov\Yii2\Web\Request;
/**
* @property Request $request
*/
class Controller extends \yii\web\Controller
{
public function init(): void
{
parent::init();
$this->request = Instance::ensure($this->request, Request::class);
}
}class ProductController extends Controller
{
public function __construct(
string $id,
Module $module,
private readonly ProductService $service,
array $config = [],
) {
parent::__construct($id, $module, $config);
}
public function actionDelete(): array
{
$this->response->format = Response::FORMAT_JSON;
return $this->service->delete($this->request->getPostInt('id'));
}
}