Почему пользовательская директива не отражает изменения в ее коде сразу

Я пишу простую пользовательскую директиву в 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()Я должен повторить вышеупомянутые шаги, чтобы отразить изменения.

ОБНОВИТЬ

Я пытался очистить кэш различными способами, как описано в эта тема но все равно безуспешно.

ОБНОВИТЬ

Поскольку никто не отвечает на этот вопрос в StackOverFlow, я разместил его на Laravel Github.

6

Решение

Замечания: Я просто вставляю ответ, данный @lukasgeiter на Github Thread.

Проблема в том, что скомпилированные представления кэшируются, и вы не можете
отключи это. Однако вы можете очистить файлы. Либо вручную
удаление всего в хранилище / фреймворке / представлениях или запуском
команда php artisan view:clear

Не поддерживается в Laravel 4 или 5.0

Эта команда не найдена в Laravel 4 или 5.0. Это новая команда, введенная в Larvel 5.1. Здесь ViewClearCommand код из 5.1.

Вручную добавьте поддержку в Laravel 4 или 5.0

Вы можете вручную добавить поддержку в Laravel 4 или 5.0.

Зарегистрировать новую команду

Способ добиться этого в предыдущих версиях — зарегистрировать новую команду. Аритсан Девелопмент раздел полезен в этом отношении.

Окончательный рабочий код для 4.2.1

Я проверил следующий код на 4.2.1.

Добавить новый командный файл

приложение / команды / 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
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]