【问题标题】:How to Pass PHP Session Variable to external JS file in Symfony如何在 Symfony 中将 PHP 会话变量传递给外部 JS 文件
【发布时间】:2017-07-08 06:37:36
【问题描述】:

目前我在一个关于员工绩效评估的 PHP Symfony 项目中工作。 所以我需要知道我们如何获取员工的 PHP 会话变量(员工角色)请参阅外部 js 文件的 php 文件($role = $_SESSION['empRole'];)。(js 文件也附加)。我正在使用 PHP Symfony 框架。

实际上我需要检查谁登录到网站。如果是管理员/核心成员/人力资源。 只有当核心成员登录网站时,我才需要对某些文件进行验证。

这是我需要将 $role 传递给外部 JS 文件(在 pastebin 中)的代码部分

    public function executeIndex(sfWebRequest $request) {
        if (isset($_SESSION['empId'])) {
            $role = $_SESSION['empRole'];
            if ($role == "admin") {
                $empId = $this->getUser()->getAttribute('empId');
                $team_members = GroupwareEmployeesPeer::getAllSubordinatesId($empId`enter code here`);
                $nc = new Criteria();
                $nc->add(PeD`enter code here`ates`enter code here`Peer::NAME, 'Dashboard');
                $resultset = PeDatesPeer::doSelect($nc);

所以你们能给我一个解决方案吗,因为我被这个问题困扰了很长时间。

php和外部js文件请看pastebin代码。

https://pastebin.com/kbkLjSFa - PHP 文件。

https://pastebin.com/M60Rg64U - JS文件

【问题讨论】:

  • 由于您使用的是 Symfony,您可能需要查看内置的安全/防火墙/用户角色功能。
  • 对不起,我没有得到你。你能简要解释一下吗?因为我是这个 PHP Symphony 的新手。
  • 看这里:symfony.com/doc/current/security.html Symfony 会为您完成整个会话管理,包括用户角色,如果您愿意的话。之后,只需在模板文件中添加一个简单的 is_granted('SOME_ROLE') 即可将权限转移到 JavaScript。
  • 对不起,有没有其他方法可以将 php 变量获取到外部文件?我不了解security.xml。您能否参考我附加的代码并指导我解决问题?
  • 我的实际问题是我需要从 PHP 文件中获取 PHP 变量,我需要在另一个外部 js 变量中使用它。

标签: javascript php symfony session


【解决方案1】:

是的,您可以将 php 变量 放入 js 文件

方法一:

将您的 .js 文件重命名为 .js.php 并将 php 变量作为查询字符串传递给您在页面中链接此文件的文件。

因此,如果您有一些 test.js 文件,请将其重命名为 test.js.php 并像这样在您的页面中使用它

<script src="test.js.php?session_var=<?= $your_var_here;?>&any_var=<?= $any_php_var;?>"></script>

在你的 js 文件中,从 查询字符串参数中检索值 所以在 test.js.php 里面,你可以简单地

var some_var = "<?= $_GET['session_var']";
var any_var = "<?= $_GET['any_var'];?>";
//rest of your logic goes here

方法二:

使用 AJAX 请求。

var some_var, another_var; 
$.ajax({
  url : '/url-which-returns-session-vars', //return the session data in json from this url
  asnyc : false,
  dataType : 'json', 
  success : function(res){
     some_var = res.some_var;
     another_var = res.another_var;
  }
});
//rest of the logic goes here.

这两种方法都有效。但我更喜欢第一种方法,因为我不必编写额外的代码。

编辑: 假设ajax调用的响应是这样的

{
   some_var : 'value here',
   another_var : 'another value here'
}

所以 success function 参数中的 res 包含此响应,并且由于响应是 JSON,您可以使用 访问这些值。符号。 因此,

some_var = res.some_var;
another_var = res.another_var;

由于这些变量是全局变量,因此您可以在此文件的代码中的任何位置使用它们。

【讨论】:

  • 您好,我无法将其重命名为 test.js.php。我该怎么办?
  • 你能描述一下 some_var = res.some_var; 背后的逻辑吗? another_var = res.another_var;这些变量,因为我是新手?
  • 我只需要使用这个 $role = $_SESSION['empRole'];那么如何编写代码,以便我可以在外部 js 文件中访问相同的代码。感谢您提供代码。
【解决方案2】:
 ?> <script> var php_variable = '<?php $variable ?>'; </script> <?php

Global 变量应该在 external js 文件 include 之前声明。在 js 文件中使用这个变量名访问它php_variable

在上面的代码之后。此处应包含 jquery 外部文件

<script src="external.js" ></script>

external.js

consol.log(php_variable);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2020-06-06
    • 2019-07-09
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多