Доступ к классу 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