我在以下类中定义了最小/最大长度值:
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是一个前端框架,并且在客户端加载,因此将无法使用上述服务器端类来保持最小最大数量的集中。
请提出如何解决此问题的方法。
答案 0 :(得分: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变量MyUserReqs
在vue组件中对其进行定义。
答案 1 :(得分: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
答案 2 :(得分:0)
我将从前端取消验证逻辑,而在后端进行处理。这样,您只需要在一个地方编写验证逻辑,前端就可以适当地处理响应。
Jeffery Way在这方面做得很好。我建议遵循此-https://laracasts.com/series/learn-vue-2-step-by-step/episodes/19