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



我们一直在将MVC内容转换为来自Laravel应用程序的单独包。我们仍然在实际应用程序中保留布局,但问题是包无法使用@extends('layouts.mainlayout')指令方法来模板化我们可以在布局中呈现部分的位置,如下所示:<title>App Name - @yield('title')</title>使用 section 指令。

以下是该应用程序设计的快照:

拉维尔应用

主布局(即整个应用程序的"母版"页面)

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 模板,如下所示:

资源/视图/布局/主布局.刀片.php

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

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

当您在Laravel应用程序/项目中创建包并发布包时,包的新副本驻留在/vendor/package-name

实际发布的软件包驻留在您的Laravel应用程序/项目中的正常位置,就像它是从应用程序/项目中创建的一样!

例如

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

拉维尔/应用基础设施:

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/

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

所以简而言之,

包将有权访问应用程序中的布局。当您发布视图时,默认情况下,它们将在布局/视图的两个位置查找。

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

扩展布局时,默认情况下 Laravel将使用Laravel项目中的布局project/resources/views/layouts/sample_layout.blade.php

@extend('layouts.sample_layout')

如果我们想使用包布局,假设你的包布局是这样的

package_name/resources/views/layouts/pk_layout.blade.php

我们必须使用它

@extend('package_name::layouts.pk_layout')

相关内容

  • 没有找到相关文章

最新更新