You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter中实现类似Laravel的@push/@stack脚本堆叠功能

CodeIgniter 替代 Laravel @push/@stack 脚本堆叠功能的实现方案

方案1:自定义辅助函数(适配CodeIgniter3/4,轻量无侵入)

  • 首先在application/helpers(CI3路径)或app/Helpers(CI4路径)下新建stack_helper.php,写入以下代码:
<?php
if (!function_exists('push')) {
    function push(string $stackName, string $content): void
    {
        $CI =& get_instance();
        // CI4可以直接用全局服务存储,逻辑一致
        if (!isset($CI->stacks[$stackName])) {
            $CI->stacks[$stackName] = [];
        }
        $CI->stacks[$stackName][] = $content;
    }
}

if (!function_exists('stack')) {
    function stack(string $stackName): string
    {
        $CI =& get_instance();
        if (empty($CI->stacks[$stackName])) {
            return '';
        }
        return implode(PHP_EOL, $CI->stacks[$stackName]);
    }
}
  • 自动加载辅助函数:打开自动加载配置文件,将stack加入辅助函数加载配置
    • CI3路径:application/config/autoload.php,修改$autoload['helper'] = ['stack'];
    • CI4路径:app/Config/Autoload.php,修改$helpers = ['stack'];
  • 实际用法和Laravel基本一致:
    子视图中往栈追加内容:
    <?php push('scripts', '<script src="/example.js"></script>'); ?>
    
    公共布局模板中对应位置输出整个栈的内容:
    <?= stack('scripts') ?>
    

方案2:CodeIgniter4 内置功能直接实现

CI4自带的视图布局插槽本身就支持内容堆叠,不需要额外开发:

  • 子视图中追加内容:
<?php $this->section('scripts') ?>
<script src="/example.js"></script>
<?php $this->endSection() ?>
  • 公共布局中输出所有堆叠的内容:
<?= $this->renderSection('scripts') ?>

方案3:临时全局变量实现(适合小型项目快速使用)

不需要额外新建文件,直接在公共布局顶部初始化全局栈变量,子视图直接往变量里追加内容,最后在布局对应位置输出即可:

<!-- 公共布局顶部 -->
<?php $GLOBALS['stacks']['scripts'] = $GLOBALS['stacks']['scripts'] ?? []; ?>

<!-- 子视图中追加 -->
<?php $GLOBALS['stacks']['scripts'][] = '<script src="/example.js"></script>'; ?>

<!-- 公共布局底部输出 -->
<?= implode(PHP_EOL, $GLOBALS['stacks']['scripts']) ?>

内容的提问来源于stack exchange,提问作者Sandhya Srishti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:36:03