【问题标题】:How to clear compiled view for specific blade template如何清除特定刀片模板的编译视图
【发布时间】:2016-10-23 15:54:09
【问题描述】:

PHP artisan view:clear 命令清除应用程序中的整个编译视图。 如何清除特定视图的编译输出。

【问题讨论】:

    标签: laravel-5 laravel-views


    【解决方案1】:

    简单答案:编写您自己的命令。

    我该如何开始? 首先,您必须知道编译视图与原始刀片视图具有不同的名称。

    他们有什么名字? Laravel 在完整文件路径中调用 sha1()。举个例子。 layouts/app.blade.php编译后的文件名(默认安装自带)。

    在低于 5.2 的版本中使用 md5() 代替 sha1(),

    5.2, 5.3 => sha1()
    5.1, 5.0, 4.2, 4.1, 4.0 => md5()
    

    假设您的版本 >= 5.2

    sha1('C:\xampp\htdocs\myapp\resources\views/layouts/app.blade.php');
    

    所以文件名将是 9407584f16494299da8c41f4ed65dcb99af82ae2.php

    那我该怎么做呢?

    • 创建以 filename 作为参数的新命令。
    • 在 fire() 函数中添加文件名的视图路径。正如我在C:\xampp\htdocs\myapp\resources\views(查看完整路径)+/layouts/app.blade.php(文件名)之前向您展示的那样

    $path = 'C:\xampp\htdocs\myapp\resources\views' . '/layouts/app.blade.php';

    • $path = sha1($path) . '.php'; 获取编译后的文件名。
    • 检查编译视图目录中是否存在文件名
    • 如果存在则删除文件

    你会有类似的命令,

    注意:如果您有不同的视图路径(更改默认值),您必须 在下面对我的代码进行更改。

    <?php
    namespace App\Console\Commands;
    use Illuminate\Console\Command;
    use RuntimeException;
    class RemoveCompiled extends Command
    {
        protected $signature = 'view:clearOne {file}';
        protected $description = 'Remove one compiled view!';
        public function handle()
        {
            $path = sha1($this->laravel['config']['view.paths'][0] . '/' . $this->argument('file'));
            $f =  $this->laravel['config']['view.compiled'] . '\\'. $path . '.php';
            if(!file_exists($f))
                return; //do whatever you want
            if(unlink($f))
                echo "File deleted!";
        }
    }
    

    调用:php artisan view:clearOne layouts/app.blade.php

    【讨论】:

    • 谢谢,这似乎可行,但我的问题有些不同,我开发了自定义刀片指令,并从中返回一个动态字符串,让我们说一些 db 查询值,现在怎么办发生在我添加自定义指令的刀片不反映来自 DB 的新值,除非我清除该视图的编译视图(包含自定义指令),我认为每次清除所有编译视图都不是一个好主意。
    • @harish 您在代码中调用工匠命令。让我们看看,您查询并返回带有查询结果的视图。在返回视图之前。您可以使用相同的方法调用工匠。然后返回视图。
    • 是的,我明白了,但这是唯一的方法吗?因为我认为对于每个 http 请求,我的视图都会重新编译...这会影响应用程序性能
    • @harish "is it only way" 这将引发一个远离“我如何删除一个编译视图而不是所有视图”的新问题。
    • 是的,同意.. 谢谢,感谢您的时间和投入(y)
    猜你喜欢
    • 1970-01-01
    • 2017-08-07
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2014-05-01
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多