Laravel:从包中扩展子视图中的布局

时间:2019-03-16 21:27:43

标签: php laravel composer-php

我们一直在将MVC内容转换为与Laravel应用程序分开的软件包。我们仍然将布局保留在实际的应用程序中,但是问题是程序包无法使用@extends('layouts.mainlayout')指令方法来模板化在布局中如何像这样呈现节的位置:<title>App Name - @yield('title')</title>使用section指令。

这是应用程序设计的快照:

Laravel应用程序

整个应用程序的主布局(也称为“主”页面)

 resources/views/layouts/mainlayout.blade.php

使用mainlayout.blade.php从应用程序中获取视图的示例

例如:resources / views / home / index.blade.php

 @extends('layouts.mainlayout')
 @section('title')
     Home 
 @stop

 @section('css') 
    @parent
   <style>
     .#alp{font-size: 12pt;}
   </style>
 @stop

@section('content')
<table id="alp" class="display" style="width:100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Position</th>
            <th>Office</th>
            <th>Age</th>
            <th>Start date</th>
            <th>Salary</th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>
@stop

@section('custom_js')
<script>
$(document).ready(function() {
    var t = $('#alp').DataTable( {
                "responsive": true,
        "scrollX": true,
        "initComplete": function(){
            CTSA.showRecordCount(t);
            CTSA.Flags.initCompleteDt = true;
        },
        "fnDrawCallback":function(){
            if(CTSA.Flags.initCompleteDt)
                CTSA.showRecordCount(t);
        }       
    });
} );
</script>
@stop

工作不正常

使用mainlayout.blade.php包的示例

例如:packages / testpackage / resources / views / test.blade.php

@extends('layouts.mainlayout.php')

 @section('title')
     Test Page 
 @stop

我可以使程序包使用布局,但是我无法使其通过@extends('layouts.mainlayout')来使用它。目前,它基本上只是将test.blade.php视图塞入mainlayout.blade.php布局中。

它基本上使用mainlayout.blade.php模板,如下所示:

resources / views / layouts / mainlayout.blade.php

@section('content')
 Contents of view test.blade.php get crammed here
@stop

1 个答案:

答案 0 :(得分:1)

好消息是,默认情况下,您的软件包可以访问laravel应用程序的根目录!

在您创建一个包并将其发布到Laravel Application / Project中时,该包的新副本位于/vendor/package-name

已发布的ACTUAL程序包位于Laravel应用程序/项目的正常位置,就像它是在应用程序/项目中创建的一样!

例如,

您包的资产(即css,js,图像)发布在应用程序的公共文件夹

Laravel /应用基础架构:

App
   -Http
        -Controllers
                -AppController
                -PackageController 
   -Listeners
   -Console
public
   -assets
         -images
   -css
   -js
   -package-name
         -assets
                -images
         -css
         -js
resources
   -views
         -layouts
                -masterLayout.blade.php
                -partials
         -package-name
                -packageChildView.blade.php 
                -package-partials

如您所见,您所有的包都可以进入/resources/views/的布局!您还可以默认使用public/

在接管大型/非结构化项目时,请确保对有问题的文件进行搜索,因为您可能会惊讶地发现一个文件以及您正在处理的有问题的文件有多个副本可能是错误的!

简而言之,

该软件包将有权访问应用程序中的布局。当您发布视图时,它们将显示在two spots for the layouts/views by default中。

  

Laravel实际上为您的视图注册了两个位置:   应用程序的资源/视图/供应商目录以及您所在的目录   指定。