11

我有以下类,我在其中定义了最小/最大长度值:

class MinMaxValuesUser {
    const Min_UserName = 6;
    const Max_UserName = 30;
}

下面是请求类中的规则,其中使用最小最大值而不是硬编码。

public function messages() {
    return [

        "Min_UserName.min" =>  trans("Profile.Min_UserName"),
        "Max_UserName.max" =>  trans("Profile.Max_UserName")
    ];
}

public function rules() {

    return [
        "UserName" =>  "min:" . MinMaxValuesUser::Min_UserName 
                          . "|max:" . MinMaxValuesUser::Max_UserName
    ];
}

下面是我使用相同服务器端类的 JQuery Validate 代码。

$('form#frmProfile').validate({
    rules: {
        UserName: {
            minlength: {!! \App\MinMaxValues\MinMaxValuesUser::Min_UserName !!},
            maxlength: {!! \App\MinMaxValues\MinMaxValuesUser::Max_UserName !!}
        }
    }
});

问题

由于我写了很多代码,所以我开始使用已经嵌入在 Laravel 中的 Vue.js。在这里一切都很好

但是我们知道 vue.js 是一个前端框架并在客户端加载,因此将无法使用上述服务器端类来保持最小最大数量集中。

请建议如何摆脱这个问题。

4

3 回答 3

5

将您的用户配置放在这样的 /config/user.php 文件中

<?php

return [
  'Min_UserName' => 4,
  'Max_UserName' => 10
];

您现在可以像这样在 php 中的任何位置访问它

config('user.Min_userName'); // specific value
config('user'); // array of both values

你可以像这样把它放到你的视图文件中:

@json(config('user'))

如果您的视图组件是在刀片文件中定义的,您可以将其放入数据定义中:

'user_requirements': @json(config('user'))

如果您的 vue 组件被进一步隐藏在 js 文件中,那么您需要像这样在刀片模板(可能是您的布局)中定义一个 js 变量

let MyUserReqs = @json('user');

然后你可以使用 js 变量在你的 vue 组件中定义它MyUserReqs

于 2018-09-21T00:27:25.480 回答
2

app.blade.php您可以像这样设置模板:

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <!-- Site Properties -->
    <title>{{ config('app.name') }}</title>

    <!-- Styles -->
    <link href="{{ asset('inside/css/app.css') }}" rel="stylesheet">

</head>
<body>

    <div id="app"></div>

    <!-- Scripts -->
    <script src="{{ asset('inside/js/app.js') }}"></script>

    <script type="text/javascript">
        const globalProps = {
            minlength: {!! \App\MinMaxValues\MinMaxValuesUser::Min_UserName !!},
            maxlength: {!! \App\MinMaxValues\MinMaxValuesUser::Max_UserName !!}
        }

        globalProps.install = function(){
          Object.defineProperty(Vue.prototype, '$globalProps', {
            get () { return globalProps }
          })
        }

        Vue.use(globalProps);
    </script>

</body>
</html>

我们定义一个常量,然后将该常量“安装/定义”为 vue.prototype 对象,然后我们告诉 vue 使用它。您也可以在任何刀片模板中进行设置...但如果您在应用程序的任何地方都需要它,您可以在此处进行设置。

然后你准备好了,在你的 vue 实例中,你可以像这样将它用于 html/template

<div v-if="$globalProps.minlength == 6"></div>

如果你想在脚本中访问它:

methods: {
    someMethod() {
        if(this.$globalProps.maxlength == 6){
        }
    },
}

在 vue 之外,在 jquery 上,您可以将其简称为globalProps.maxlength

于 2018-09-23T08:48:06.603 回答
0

我会将验证逻辑从前端拿走,而是在后端处理。这样,您只需在一个地方编写验证逻辑,前端就会适当地处理响应。

Jeffery Way 在这方面做了一个非常好的教程。我建议遵循这个 - https://laracasts.com/series/learn-vue-2-step-by-step/episodes/19

于 2018-09-24T14:27:33.150 回答