将函数的数据放入 blade、laravel

Putting a function's data into blade, laravel

我的 laravel 控制器的函数中有以下代码:

try {
    return json_encode(FormBuilder::BuildOrderForm($dealer, $aa, $form));
} catch (OPSException $e) {
    return json_encode(['error' => $e->getUserMessage()]);
} catch (Exception $e) {
    return json_encode(['error' => $e->getMessage()]);
}

这是在 JSON object 中返回我需要的数据。我正在尝试重新创建它以在 laravel blade 的 html 代码中构建数据。将上述 FormBuilder::BuildOrderForm($dealer, $aa, $form) 放入我的 blade 此处的正确方法是什么:

@section('content')

<h3 style="font-size: 26px; padding: 10px 0;"> {{ <!-- This is where I need the data --> }} </h3>
<p class="uk-text-muted" style="font-size: 20px;" ></p>

<div class="uk-grid">
    <div class="uk-width-2-10">
        <ul style="margin: 0; padding: 0; list-style-type: none; float: left; width: 100%;">

        </ul>
    </div>
@endsection

控制器中的整个class:

class OrderController extends Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->middleware('auth');
        $ordering_access = AttributesList::with('attr_info')
            ->where('attr_id', AttributesList::attrId('ordering_toggle'))
            ->where('data', $this->dealer)
            ->count();

        if ($ordering_access > 0) {
            \Session::flash('error_message', "You are not allowed to order. Please contact your CSR!");
            $attributeid = 100000;
        } else {
            $attributeid = 6;
        }
        Access::Check($attributeid);
        $this->dealer = Access::getAttrValue('dealer_num');
    }

    public function index()
    {
        $forms = FormBuilder::Orderforms($this->dealer);
        return view('Shop.Order.index')->with('forms', $forms);
    }


    public function show($id)
    {
        $cart_num = Access::getAttrValue('cart_num');
        if (!$cart_num) {
            $cart = 0;
        } else {
            $find_cart = Cart::find($cart_num);
            if ($find_cart  && $find_cart->orderform == $id) {
                $cart = $cart_num;
            } else {
                $cart = 0;
            }
        }
        return view('Shop.Order.show')
            ->with('dealer', $this->dealer)
            ->with('cart', $cart)
            ->with('form', $id);
    }

    public function store(Request $request) {
        $this->validate($request, [
            'dealer' => 'required|numeric',
            'form' => 'required',
        ]);

        // check to make sure this dealer can order from this formid
        $dealer = Input::get('dealer');
        $form = Input::get('form');

        $aa = FormBuilder::getcompanyfromform($form) + 0;

        $comp = CustomerDataNew::getcomp($dealer);

        if (!in_array($aa, $comp)) {
            return "Error: Dealer can't use this form";
        }

        try {
            return json_encode(FormBuilder::BuildOrderForm($dealer, $aa, $form));
        } catch (OPSException $e) {
            return json_encode(['error' => $e->getUserMessage()]);
        } catch (Exception $e) {
            return json_encode(['error' => $e->getMessage()]);
        }
    }
}

您只是 return 编码数据,因此您一定看到了一堆 JSON(如果您捕获了任何异常,则为错误)。

为了显示任何数据,您必须执行与在 show() 方法中相同的操作,即 return 视图并在该特定视图内呈现任何数据或部分.

尝试以下操作:

public function store(Request $request) {

...

    try {

        $data = json_encode(FormBuilder::BuildOrderForm($dealer, $aa, $form));
        return view('Shop.Order.show')->with('data', $data);

    } catch (OPSException $e) {
        return $this->returnFromException($e->getUserMessage());
    } catch (Exception $e) {
        return $this->returnFromException($e->getMessage());
    }
}

public function returnFromException($error)
{
    $error = json_encode(['error' => $error]);
    return view('Shop.Order.show')->with('error', $error);
}

现在,在您看来,使用 Blade,您可以像这样显示数据:

@section('content')

    @if(isset($error))    
        <h3 style="font-size: 26px; padding: 10px 0;">{{ dd($error) }} </h3>
    @else if(isset($data))
        {{ dd($data) }}
    @endif
    <p class="uk-text-muted" style="font-size: 20px;" ></p>

    <div class="uk-grid">
        <div class="uk-width-2-10">
            <ul style="margin: 0; padding: 0; list-style-type: none; float: left; width: 100%;">

            </ul>
        </div>
    </div>

@endsection

请注意,您必须删除 Blade 视图中的 dd()s,因为它会停止 HTML 渲染。您将不得不使用 @foreach() 之类的东西来呈现数组或 JSON.

希望对您有所帮助!

干杯!

<?php 

use App\Http\Controllers\ControllerName;
echo ControllerName::functionName();

 ?>

函数名称应包含 'static' 关键字,例如

控制器函数:

public static function functionName() {
return "Hello World!";
}

我看到了这个代码 link How to call a controller function inside a view in laravel 5

例如:

路线:

Route::get('checkTheTest', ['as' => 'checkrequest', 'uses' => 'MiscController@myTest']);

杂项控制器:

 public static function requesting($request){
        return 'error ' .$request;
    }

blade 模板视图:

<?php
 use App\Http\Controllers\MiscController;
 echo MiscController::requesting('hello world'); ?> 

输出:

error hello world