Laravel在视图内调用控制器的最佳方法?

时间:2019-11-12 11:25:34

标签: laravel laravel-blade

我有一个页面,其中包含儿童团体。 每个集团都需要具有特定的渲染(具有特定的模板)。 为此,我必须在刀片模板中使用@php。

这是我的代码:

PageController.php

public function edit(Page $page)
{
    return view('pages.edit', compact('page')); 
}

查看页面/edit.blade.php

<section id="contents" class="contents ui-sortable">
    @foreach ($page->blocs as $bloc)
        @php
            echo $bloc->id;
            echo App\Http\Controllers\BlocController::renderBloc($bloc);
        @endphp
    @endforeach
</section>

BlocController.php

public static function renderBloc(Bloc $bloc) {
    echo $bloc->id;
    return view('blocs.show.' . $bloc->bloc_type, [
        'bloc' => $bloc, 
        'data' => json_decode($bloc->data)
    ]);
}

然后是集团的一个例子

资源/视图/blocs/show/text.blade.php

@extends('blocs.show')
@section('bloc')
{{ $bloc->id }} 
@endsection

资源/视图/blocs/show.blade.php

<section class="bloc bloc_{{ $bloc->bloc_type }}" data-bid="{{ $bloc->id }}">
    {{$bloc->id}}
    @yield('bloc')
</section>  

我对此有2个问题:

  • 我认为这不是一个好方法吗?我不喜欢在模板中使用@php。我想对此发表意见吗?也许我需要使用服务提供商?
  • 模板(resources / views / blocs / show / text.blade.php)中的$ bloc-> id错误(即使我所有的回声$ bloc都显示了foreach中第一个子块的ID) ->在显示良好ID(页面/edit/blade.php、BlocController.php、resources/view/blocs/show.blade.php)之前,id。这是另一种证明我在做错事的证据? li>

谢谢

1 个答案:

答案 0 :(得分:2)

如果必须在视图中使用控制器,则仅意味着您没有那么好的架构。 Laravel的Blade可以轻松完成您想通过控制器解决的问题。

您可以将void draw() { printf("%p, %p\n", queue, compute.queue); VulkanExampleBase::prepareFrame(); submitInfo.commandBufferCount = 1; submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer]; VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE)); VulkanExampleBase::submitFrame(); // Submit compute commands // Use a fence to ensure that compute command buffer has finished executin before using it again vkWaitForFences(device, 1, &compute.fence, VK_TRUE, UINT64_MAX); vkResetFences(device, 1, &compute.fence); VkSubmitInfo computeSubmitInfo = vks::initializers::submitInfo(); computeSubmitInfo.commandBufferCount = 1; computeSubmitInfo.pCommandBuffers = &compute.commandBuffer; VK_CHECK_RESULT(vkQueueSubmit(compute.queue, 1, &computeSubmitInfo, compute.fence)); sleep(1000); } 与参数一起使用,并摆脱@include

资源/视图/页面/edit.blade.php

@php

资源/视图/blocs/show.blade.php

@foreach ($page->blocs as $bloc)
  @include('blocs.show', ['bloc' => $bloc])
@endforeach

资源/视图/blocs/show/text.blade.php

<section class="bloc bloc_{{ $bloc->bloc_type }}" data-bid="{{ $bloc->id }}">
    {{$bloc->id}}
    @include('blocs.show.' . $bloc->bloc_type, [
                        'bloc' => $bloc,
                        'data' => json_decode($bloc->data)
                    ])
</section>