Передача переменных laravel во внешний интерфейс Vue - PullRequest
0 голосов
/ 14 октября 2019

Для того, чтобы передать переменные php из laravel в vue-интерфейс, я создал класс Javascript. Я использую этот метод статического метода put для отправки ассоциативного массива в интерфейс.

<?php
namespace App\Helpers;


class Javascript
{

    public static function put($array, $request)
    {
        //I call this static method to pass backend variables to Vue, from blade I json_encode the payload, assign it to a window variable
        //and later add it to the Vue.prototype so I can access in vue components like this.$app.whatever.

        //This helper method can be called more than one time in laravel's request->reponse cycle, from middleware, controller action, route redirect ... 
        //so instead of creating recreating $app array everytime I want to find a way to push passed key value pairs to a global javascript object

        $app = array();

        $app = array_merge($request->globals, $array);

        view()->share('app', $app);
    }

}

Когда я хочу вернутьпросмотр лезвия laravel с данными javascript. Я делаю это так:

$featuredPosts = Post::where('isFeatured', true)->where('isVisible',true)->with('postcategory')->get();

Javascript::put([
  'meta' => $meta,
  'featuredPosts' => $featuredPosts,
], $request);

return view('publicaciones.list', compact('meta'));

И в моем макете мастер-блэйда:

<script type="text/javascript">window.$app = {!! json_encode( $app ) !!};</script>

Другой случай, когда я хочу иметь глобальные переменные для всех маршрутов. / views, для этой цели у меня есть глобальное промежуточное ПО под названием GlobalsVar, где я это делаю.

public function handle($request, Closure $next)
{
   $globals['auth'] = Auth::user() ?  User::with('appointment')->find(Auth::id()) : false;

   $globals['previousUrl'] = URL::previous();

   $request->globals = $globals;

   return $next($request);
}

В настоящее время внутри моего класса Javascript я создаю массив empy и объединяю часть моих запросов с переданным массивом из моих контроллеров,Я также передаю объект запроса в качестве параметра seconda, я хочу улучшить это двумя способами:

1) Каждый раз, когда я вызываю статический метод Javascript :: put, переданные значения объединяются в существующий объект, потому что есливо время цикла запроса -> ответа я вызываю Javascript :: put полезная нагрузка воссоздается и предыдущие данные теряются, есть ли способ преЭти данные?

2) Я не хочу передавать объект Request $ request каждый раз, когда я запускаю Javascript :: put, есть ли способ всегда внедрять метод Request

1 Ответ

0 голосов
/ 14 октября 2019

если ваш вызов vue от blade-сервера, вы можете передавать данные laravel, например, реквизиты

@extends('index')
@section('contenido')
  <div id="content-container">
     <div id="page-head">
     </div>
     <div id="page-content">
        <vue-file :variable="{{ $variable}}"></vue-file>
    </div>
@endsection

, а в файле vue вы можете получить его следующим образом

props:{
 variable:Array  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...