【问题标题】:Laravel: extending a layout in a child view from a packageLaravel:从包中扩展子视图中的布局
【发布时间】:2023-03-28 16:20:01
【问题描述】:

我们一直在将 MVC 内容转换为与 Laravel 应用程序不同的包。我们仍然在实际应用程序中保留我们的布局,但问题是 包无法使用 @extends('layouts.mainlayout') 指令 方法来模板化我们可以在哪里呈现布局内的部分,如下所示:@ 987654322@ 使用部分指令。

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

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 模板:

资源/视图/布局/mainlayout.blade.php

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

【问题讨论】:

    标签: php laravel composer-php


    【解决方案1】:

    好消息是你的包默认可以访问你的 laravel 应用程序的根目录!

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

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

    例如,

    您的包的资产,即:css、js、图像在应用的公共文件夹

    中发布

    Laravel/App 基础架构:

    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 实际上为您的视图注册了两个位置: 应用程序的资源/视图/供应商目录和您的目录 指定。

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 1970-01-01
      • 2014-12-07
      • 2017-09-28
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2013-08-06
      • 2021-02-22
      相关资源
      最近更新 更多