Доступ к классу Laravel в Vue.js
У меня есть следующий класс, где я определил минимальные/максимальные значения длины:
class MinMaxValuesUser {
const Min_UserName = 6;
const Max_UserName = 30;
}
Ниже приведено правило в классе запросов, в котором вместо жесткого кодирования используются значения min max.
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, в котором я использовал тот же серверный класс.
$('form#frmProfile').validate({
rules: {
UserName: {
minlength: {!! \App\MinMaxValues\MinMaxValuesUser::Min_UserName !!},
maxlength: {!! \App\MinMaxValues\MinMaxValuesUser::Max_UserName !!}
}
}
});
вопрос
Поскольку я пишу много кода, поэтому я начал использовать Vue.js, который уже встроен в Laravel. Все отлично работает здесь
но поскольку мы знаем, что vue.js является интерфейсной платформой и нагрузками на стороне клиента, поэтому не сможет использовать вышеуказанные серверные классы, чтобы поддерживать минимальные номера централизованно.
Просьба предложить, как избавиться от этой проблемы.
Ответы
Ответ 1
поместите свои пользовательские конфигурации в файл /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');
И затем вы можете определить его в своем компоненте vue с помощью переменной js MyUserReqs
.
Ответ 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
Ответ 3
Я бы отвлек логику проверки от внешнего интерфейса и вместо этого обработал это в бэкэнд. Таким образом, вам нужно только написать логику проверки в одном месте, и передняя часть обработает ответ соответствующим образом.
Джеффри Уэй сделал действительно хороший учебник по этому вопросу. Я бы рекомендовал следующее: https://laracasts.com/series/learn-vue-2-step-by-step/episodes/19