gpt4 book ai didi

javascript - 有没有一种方法可以在不重复的情况下将值(如枚举)从前端(JS)连接到后端(PHP/Ruby)?

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:54 26 4
gpt4 key购买 nike

给定一个后端基于 PHP 或 ruby​​ 并在前端使用 JavaScript 编程的 Web 应用程序,有时我们需要在两端定义值以处理通过 API 在前端和后端之间通信的数据。

在 JavaScript 中是这样的:

var options = {
OPT_A : 1,
OPT_B : 2,
OPT_C : 3
};

switch(data.type)
{
case options.OPT_A:
/* */
break;
case options.OPT_B:
/* */
break;
case options.OPT_C:
/* */
break;
}

在 php 中是这样的:

const OPT_A = 1;
const OPT_B = 2;
const OPT_C = 3;

问题是你必须定义它们两次;每种语言一次。这可能会导致错误/不一致。

我想到的唯一方法是从服务器定义 JavaScript 部分,但我不喜欢 JS 代码由 PHP/Ruby 代码编写的想法。

有没有避免代码重复的方法?

最佳答案

这里是一个关于如何创建 PHP 枚举并将其作为对象发送到前端的解决方案。

我在 PHP 中创建了一个名为 Food 的枚举类:

abstract class Food
{
const BANANA = 0;
const ORANGE = 1;
const WATERMELON = 2;

const BANANA_STRING = 'banana';
const ORANGE_STRING = 'orange';
const WATERMELON_STRING = 'watermelon';

const MAP = [
self::BANANA => self::BANANA_STRING,
self::ORANGE => self::ORANGE_STRING,
self::WATERMELON => self::WATERMELON_STRING
];

const REVERSEMAP = [
self::BANANA_STRING => self::BANANA,
self::ORANGE_STRING => self::ORANGE,
self::WATERMELON_STRING => self::WATERMELON
];

static function toString($enum){
return self::MAP[$enum];
}
static function toEnum($string){
return self::REVERSEMAP[$string];
}
}

我在接下来的这些步骤中使用的是 Laravel 框架,但根据您的项目,它应该大致相同。这里的重要部分是我使用我在枚举中创建的::MAP:

use PathToMyLibrary\MyLibrary\Enums\Food;

class FoodController extends Controller {

public function foodView() {
$title = "hello";
$food_enum = Food::MAP;

// attach these variables to the food view
return view('food', compact('title', 'food_enum'));
}

}

现在在我的 food.blade.php 文件(Laravel 中使用的 PHP-html View 模板文件)中,我可以将这个 $food_enum PHP 对象转换为 JavaScript 对象。

@section('title')
{{title}}
@endsection

@section('page_content')
<div class="page-heading">
<h1>{{title}}</h1>
</div>
<div id="food-app">...your content...</div>
@endsection

@section('includes')
<script>
// convert this $food_enum from a PHP object into a JavaScript object
var food_enum = <?php echo json_encode($food_enum); ?>;
</script>
@endsection

此时,您将在 JavaScript 中拥有一个与您在 PHP 中拥有的相同枚举对象相匹配的对象。

不再需要在 PHP 和 JavaScript 中维护冗余枚举!

关于javascript - 有没有一种方法可以在不重复的情况下将值(如枚举)从前端(JS)连接到后端(PHP/Ruby)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24647721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com