Skip to content

Commit 993d44b

Browse files
committed
Controllers common
1 parent da63f8e commit 993d44b

File tree

5 files changed

+181
-14
lines changed

5 files changed

+181
-14
lines changed

src/AutoloadExample.php

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/Controller.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace taguz91\CommonRest;
4+
5+
use taguz91\CommonRest\traits\ControllerBehavior;
6+
use Yii;
7+
use yii\web\Controller as WebController;
8+
use yii\web\Response;
9+
10+
class Controller extends WebController
11+
{
12+
13+
use ControllerBehavior;
14+
15+
/**
16+
* @inheritdoc
17+
*/
18+
public function beforeAction($action)
19+
{
20+
date_default_timezone_set("America/Guayaquil");
21+
Yii::$app->response->format = Response::FORMAT_JSON;
22+
Yii::$app->response->headers->add('Content-Type', 'application/json');
23+
$this->enableCsrfValidation = false;
24+
return parent::beforeAction($action);
25+
}
26+
27+
/**
28+
* @inheritdoc
29+
*/
30+
public function afterAction($action, $result)
31+
{
32+
$result = parent::afterAction($action, $result);
33+
if (is_null($result)) Yii::$app->response->content = '';
34+
35+
// Si no es un strign no validamos nada
36+
if (!is_string($result)) return $result;
37+
38+
if ($data = json_decode($result) !== false) {
39+
if (is_object($data)) return $data;
40+
}
41+
42+
// Si es un PDF lo mostramos ya no seteamos a json
43+
if (Yii::$app->response->headers->get('Content-Type') === 'application/pdf') {
44+
return $result;
45+
}
46+
47+
Yii::$app->response->format = Response::FORMAT_HTML;
48+
Yii::$app->response->headers->remove('Content-Type', 'application/json');
49+
return $result;
50+
}
51+
52+
/**
53+
* @inheritdoc
54+
*/
55+
public function render($view, $params = [])
56+
{
57+
Yii::$app->response->format = Response::FORMAT_HTML;
58+
Yii::$app->response->headers->remove('Content-Type', 'application/json');
59+
return parent::render($view, $params);
60+
}
61+
}

src/OptionsCors.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace taguz91\CommonRest;
4+
5+
use Yii;
6+
7+
use yii\filters\Cors;
8+
9+
class OptionsCors extends Cors
10+
{
11+
12+
/**
13+
* @var array Basic headers handled for the CORS requests.
14+
*/
15+
public $cors = [
16+
'Origin' => ['*'],
17+
'Access-Control-Allow-Origin' => ['*'],
18+
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
19+
'Access-Control-Request-Headers' => ['*'],
20+
'Access-Control-Allow-Credentials' => false,
21+
'Credentials' => false,
22+
'Access-Control-Max-Age' => 86400,
23+
'Access-Control-Expose-Headers' => ['X-Pagination-Current-Page'],
24+
];
25+
26+
public function beforeAction($action)
27+
{
28+
parent::beforeAction($action);
29+
$requestMethod = Yii::$app->getRequest()->getMethod();
30+
31+
if (strtoupper($requestMethod) === 'OPTIONS') {
32+
Yii::$app->getResponse()->getHeaders()->set('Allow', 'POST GET PUT DELETE');
33+
Yii::$app->end();
34+
}
35+
36+
return true;
37+
}
38+
}

src/RestController.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace taguz91\CommonRest;
4+
5+
use taguz91\CommonRest\traits\ControllerBehavior;
6+
use Yii;
7+
use yii\rest\Controller as BaseController;
8+
use yii\web\Response;
9+
10+
class RestController extends BaseController
11+
{
12+
13+
use ControllerBehavior;
14+
15+
/**
16+
* @inheritdoc
17+
*/
18+
public function beforeAction($action)
19+
{
20+
date_default_timezone_set("America/Guayaquil");
21+
Yii::$app->response->format = Response::FORMAT_JSON;
22+
Yii::$app->response->headers->add('Content-Type', 'application/json');
23+
$this->enableCsrfValidation = false;
24+
return parent::beforeAction($action);
25+
}
26+
}

src/traits/ControllerBehavior.php

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace taguz91\CommonRest\traits;
4+
5+
use yii\filters\AccessControl;
6+
use yii\filters\auth\CompositeAuth;
7+
use yii\filters\RateLimiter;
8+
use yii\filters\VerbFilter;
9+
10+
trait ControllerBehavior
11+
{
12+
13+
/**
14+
* {@inheritdoc}
15+
*/
16+
public function behaviors()
17+
{
18+
$behavior = [
19+
'verbFilter' => [
20+
'class' => VerbFilter::class,
21+
'actions' => $this->verbs(),
22+
],
23+
'authenticator' => [
24+
'class' => CompositeAuth::class,
25+
],
26+
'rateLimiter' => [
27+
'class' => RateLimiter::class,
28+
],
29+
'corsFilter' => [
30+
'class' => OptionsCors::class,
31+
],
32+
];
33+
34+
$rules = $this->rules();
35+
if (!empty($rules)) {
36+
$behavior['access'] = [
37+
'class' => AccessControl::class,
38+
'rules' => $this->rules(),
39+
];
40+
}
41+
return $behavior;
42+
}
43+
44+
/**
45+
* {@inheritdoc}
46+
*/
47+
protected function verbs()
48+
{
49+
return [];
50+
}
51+
52+
protected function rules()
53+
{
54+
return [];
55+
}
56+
}

0 commit comments

Comments
 (0)