为啥自定义指令不能立即反映其代码的变化

Posted

技术标签:

【中文标题】为啥自定义指令不能立即反映其代码的变化【英文标题】:Why custom directive not reflecting changes in its code immediately为什么自定义指令不能立即反映其代码的变化 【发布时间】:2015-10-13 17:00:50 【问题描述】:

我正在 Laravel 中编写一个简单的自定义指令。每当我对自定义指令的代码进行一些更改时,它才会反映在视图中,直到我

评论视图中的指令。 重新加载页面 取消注释指令 重新加载页面以最终获得更改

global.php 中的自定义指令代码

Blade::extend(function($value, $compiler)

    $pattern = $compiler->createMatcher('molvi');
    return preg_replace($pattern, '$1<?php echo ucwords($2); ?>', $value);
);

视图中的指令调用

@molvi('haji') //this will output 'Haji' due to ucwords($2)

//the ucwords() is replaced with strtolower()
@molvi('haji') //this will still output 'Haji'

我正在将单词转换为大写。当假设我想使用 strtolower() 而不是 ucwords() 时,我必须重复上述步骤才能反映更改。

更新

我已尝试使用this thread 中描述的各种方法清除缓存,但仍然没有成功。

更新

由于没有人在 *** 上回答这个问题,我已将其发布到 laravel github。

【问题讨论】:

可能是因为缓存。 Have a look here. 我在 filters.php 中添加了***.com/a/18102850/3131443 中提供的代码,但仍然遇到这个问题 有没有人可以帮助我理解这个问题。我仍然没有得到答案。 【参考方案1】:

注意:我只是将@lukasgeiter 给出的答案粘贴到github thread。

问题是编译后的视图被缓存了,你不能 禁用它。但是,您可以清除文件。要么手动通过 删除存储/框架/视图中的所有内容或运行 命令php artisan view:clear

Laravel 4 或 5.0 不支持

在 Laravel 4 或 5.0 中找不到此命令。它是一个新命令,并在 Larvel 5.1 中引入。这是来自 5.1 的 ViewClearCommand 代码。

在 Laravel 4 或 5.0 中手动添加支持

您可以在 Laravel 4 或 5.0 中手动添加支持。

注册新命令

在以前的版本中实现的方法是注册新的命令。 Aritsan Development 部分在这方面很有帮助。

4.2.1 的最终工作代码

我在 4.2.1 上测试过以下代码。

添加新的命令文件

app/commands/ClearViewCommmand.php

<?php

use Illuminate\Console\Command;
use Illuminate\Filesystem\Filesystem;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class ClearViewCommand extends Command 
/**
 * The console command name.
 *
 * @var string
 */
protected $name = 'view:clear';

/**
 * The console command description.
 *
 * @var string
 */
protected $description = 'Clear all compiled view files';

protected $files;
/**
 * Create a new command instance.
 *
 * @return void
 */
public function __construct(Filesystem $files)

    parent::__construct();

    $this->files = $files;


/**
 * Execute the console command.
 *
 * @return mixed
 */
public function fire()

    //this path may be different for 5.0
    $views = $this->files->glob(storage_path().'/views/*');
    foreach ($views as $view) 
        $this->files->delete($view);
    
    $this->info('Compiled views cleared!');



注册新命令

在 app/start/artisan.php 中添加以下行

Artisan::resolve('ClearViewCommand');

CLI

现在终于可以运行命令了。每次更新自定义指令中的代码后,您都可以运行此命令以立即更改视图。

php artisan view:clear

【讨论】:

以上是关于为啥自定义指令不能立即反映其代码的变化的主要内容,如果未能解决你的问题,请参考以下文章

为啥阿波罗服务器自定义指令不起作用?

vue怎么自定义指令??

vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化

Vue.js 自定义指令

day3 自定义指令详解

VUE之自定义指令