aaugustyniak/params-codec-bundle

Symfony 扩展包,用于混淆/加密路由参数。

1.1.0 2017-05-06 17:30 UTC

This package is not auto-updated.

Last update: 2024-09-15 01:42:35 UTC


README

=================== [构建状态] (https://travis-ci.org/artur-augustyniak/ParamsCodecBundle)

提供简单的 Symfony 2/3 扩展包,用于 AES 加密路由参数。

通过 Composer 安装

{
    "require": {
        "aaugustyniak/params-codec-bundle": "dev-master"
    }
}

使用和设置

composer

composer aaugustyniak/params-codec-bundle

AppKernel.php

$bundles = [
    ...,
    new Aaugustyniak\ParamsCodecBundle\ParamsCodecBundle()
];

基本用法

此扩展包注册了 param_codec 服务和 twig 扩展,提供与标准 Twig URL 创建函数相关联的两个函数。

在默认实现中,ParamCodec 接口由 AesCodec 支持。ParamCodec 使用来自 parameters.yml 的密钥密码。

DefaultController.php

use Aaugustyniak\ParamsCodecBundle\Annotations\DecryptParams;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;


class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        /**
         * Value to be encrypted in resulting url/path
         */
        $rawValue = "Some secret internal value";
        return $this->render('default/index.html.twig', [
            'raw_value' => $rawValue,
        ]);
    }


    /**
     * @DecryptParams()
     *
     * @Route("/display/{param}", name="display")
     * @param $param
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function displayAction($param)
    {
        /**
         * Using @DecryptParams() annotation $param is auto decrypted
         */
        return $this->render('default/index.html.twig', [
            'decrypted_value' => $param
        ]);

    }
    
}

index.html.twig

{% extends 'base.html.twig' %}

{% block body %}
    <div id="wrapper" xmlns="http://www.w3.org/1999/html">
        <div id="container">
            <div>
                {% if decrypted_value is defined %}
                    <div style="border: 1px dotted red;background: green;padding: 16px;">
                        Decrypted param: <code>{{ decrypted_value }}</code>
                        <a href="{{ path('homepage') }}">
                            BACK
                        </a>
                    </div>
                {% else %}
                    <p>
                        {% verbatim %}
                            {{ raw_value }}
                        {% endverbatim %}
                        <code>{{ raw_value }}</code>
                    </p>
                    <!--
                    Functions:
                        encrypted_path
                        encrypted_url
                    are equivalent of basic twig path and url
                    -->
                    <div style="border: 1px dotted green;padding: 16px; margin-top: 12px;">
                        <a href="{{ encrypted_path('display', {'param': raw_value}) }}">
                            {% verbatim %}
                           {{ encrypted_path('display', {'param': raw_value}) }}
                        {% endverbatim %}
                        </a>
                        <a href="{{ encrypted_url('display', {'param': raw_value}) }}">
                            {% verbatim %}
                           {{ encrypted_url('display', {'param': raw_value}) }}
                        {% endverbatim %}
                        </a>

                    </div>
                {% endif %}
            </div>
        </div>
    </div>
{% endblock %}