2016-04-05 2 views
1

Я пытаюсь найти способ вызова метода из моего файла класса внутри файла клика. foo() использует переменную $item из цикла foreach. Поскольку я зацикливаюсь внутри файла клинка, я не могу, или, вернее, это плохая практика, вызывать метод контроллера внутри представления, или так я слышал.Как вызвать метод класса внутри вида Laravel?

MyController

public function getData() { 
    $data = DB::paginate(10); 
    return view('view', ['data' => $data]); 
} 

public function foo($var) { 
//do something with $var 
return $var 
} 

view.blade.php

@foreach ($data as $item) 

<td>{{$item->key}}</td> 
<td>{{ //myController::foo($item) is Essentially the output I need }} </td> 

@endforeach 

Поскольку $item генерируется в foreach (который находится внутри его), я не знаю, как назвать метод перед тем Прошлое к представлению в операторе return.

Любые предложения?

ответ

7

Просто поделитесь контроллер с вашей точки зрения:

Контроллер:

public function getData() { 
    $data = DB::paginate(10); 
    return view('view', ['data' => $data, 'controller' => $this]); 
} 

Вид:

@foreach ($data as $item) 

<td>{{$item->key}}</td> 
<td>{{ $controller->foo($item) }} </td> 

@endforeach 

Лучше всего было бы, чтобы генерировать выходной сигнал в контроллере:

public function getData() { 
    $data = DB::paginate(10); 
    $data = array_map(function($item) { 
     $item->output = $this->foo($item); 
     return $item; 
    }, $data); 
    return view('view', ['data' => $data]); 
} 
+0

Это замечательно. А как насчет ссылки на хелпер-файл, в котором есть класс? Скажем, @ 'App \ Helpers \ Helper.php' – ProEvilz

+1

Если я правильно вас понимаю: просто создайте экземпляр класса и поделитесь им с представлением: $ helper = new \ App \ Helpers \ Helper(); ... return view ('view', ['helper' => $ helper]); –

Смежные вопросы