Blade 에서 Controller의 메소드 호출하기

@inject 를 이용하여 메소드등을 Blade 에서 호출하여 사용할 수 있다.

controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ServiceProvider extends Controller
{
    public static function getLowestPrice($id) {
        return $id;
    }
}

blade

@inject('provider', 'App\Http\Controllers\ServiceProvider')

<span class="text-bold">
    {{ $provider::getLowestPrice($product_cat->id) }}
</span>
  • 같은 방법으로 Service를 호출할 수 도 있다.

Service injection

<?php
namespace App\Services;

class ViewerService
{
    static function astro($str, $len, $position='end') {
        $ast = '';
        for ($i = 0; $i < $len; $i++) {
            $ast .= '*';
        }
        return mb_substr($str, '0', -$len) . $ast;
    }
}

blade

@inject('viewer', 'App\Services\ViewerService')

<span class="text-bold">
    {{ $viewer::astro('mynameis, 4) }}
</span>
@inject('metrics', 'App\Services\MetricsService')
 
<div>
    Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
</div>
  • 위의 방식과는 사뭇 다른 방식에 대해서 말씀드리겠습니다. 위의 방식은 blade에서 기존 컨트롤러의 메소드를 호출하는 방식인데 이것과는 다르게 아예 blade 자체를 controller와 시키는 방식입니다.

blade

@include('partials/message')

partials/message

<?php
namespace App\Http\Controllers;
...............
class MessageController extends Controller
{
    public function __construct()
    {
    }

    public function received() // Request $request
    {
       // 
    }
}

$message = new MessageController();
$message->received();
?>
  • 상기보다 더 단순하고 직관적인 방식이 View Component를 사용하는 방식이다.
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1