php - tag - yii2 helpers url
Controlador de fuerza Yii HTTPS (3)
Me gustaría saber cómo forzar HTTPS (SSL) en Yii Controller Action.
Eche un vistazo a este artículo http://www.yiiframework.com/forum/index.php/topic/25407-forcing-https-in-yii/
class HttpsFilter extends CFilter {
protected function preFilter( $filterChain ) {
if ( !Yii::app()->getRequest()->isSecureConnection ) {
# Redirect to the secure version of the page.
$url = ''https://'' .
Yii::app()->getRequest()->serverName .
Yii::app()->getRequest()->requestUri;
Yii::app()->request->redirect($url);
return false;
}
return true;
}
}
E incluso esto para más detalles.
Código:
private static $secureRoutes = array(''site/login''=>'''',);
public function filterAccessControl($filterChain) {
if(!Yii::app()->getRequest()->isSecureConnection && array_key_exists($filterChain->controller->route, self::$secureRoutes)){
$this->redirect($this->createAbsoluteUrl($filterChain->controller->route, array(), ''https''));
return false;
}
else if(Yii::app()->getRequest()->isSecureConnection && !array_key_exists($filterChain->controller->route, self::$secureRoutes)){
$this->redirect($this->createAbsoluteUrl($filterChain->controller->route, array(), ''http''));
return false;
}
}
Si solo desea aplicar https force a toda su aplicación, que es lo que necesitaba, puede poner esto en su protected / components / Controller.php:
public function beforeAction($action) {
if( ! Yii::app()->getRequest()->isSecureConnection ) {
$url = ''https://'' .
Yii::app()->getRequest()->serverName .
Yii::app()->getRequest()->requestUri;
Yii::app()->request->redirect($url);
return false;
}
}
Esta es una solución más limpia que los filtros si necesita https en todo el sitio, porque con los filtros debe aplicar un array_merge con el controlador principal en todos los controladores para niños que cree. Si pierde una, no hay fuerza https para ese controlador. La desventaja menor de esto es que se llama después de que se han llamado los filtros, lo que significa que se ha realizado más procesamiento del que normalmente deseamos antes de la redirección.
Si lo necesita en un controlador por controlador o acción por acción, los filtros son lo que está buscando.