10

これが私のディレクトリ構造です(これは単なるテストプロジェクトです):

stan@mypc:/generate_assets$ sudo tree -L 3 -p
.
├── [drwxr-xr-x]  assets
│   └── [drwxr-xr-x]  css
│       ├── [-rw-r--r--]  test1.css
│       └── [-rw-r--r--]  test2.css
├── [-rw-r--r--]  composer.json
├── [-rw-r--r--]  composer.lock
├── [drwxrwxrwx]  public
├── [-rwxr-xr-x]  run
└── [drwxr-xr-x]  vendor
     ....skipping...

アセットを生成することになっている私の単純なスクリプト(「実行」ファイル)は次のとおりです。

#!/usr/bin/env php

<?php
    //loading composer's autoload
    chdir(__DIR__);
    if (file_exists('vendor/autoload.php')) {
        include 'vendor/autoload.php';
    }

    use Assetic\Asset\AssetCollection;
    use Assetic\Factory\AssetFactory;
    use Assetic\Asset\FileAsset;
    use Assetic\Asset\GlobAsset;
    use Assetic\Filter\LessFilter;
    use Assetic\Filter\CssMinFilter;
    use Assetic\AssetWriter;
    use Assetic\AssetManager;

    //Asset manager
    $am = new AssetManager();

    //Add all css files
    $css = new GlobAsset('assets/css/*.css', array(new CssMinFilter()));
    $am->set('basecss', $css);

    // Dumping assets into public
    $writer = new AssetWriter('public');
    $writer->writeManagerAssets($am);

つまり、assets / cssのcssファイルが結合され、縮小されて、「basecss.css」という名前でパブリックディレクトリにダンプされることを期待していました。これが私が得る例外です:

PHP Fatal error:  Uncaught exception 'RuntimeException' with message 'Unable to write file public/' in /generate_assets/vendor/kriswallsmith/assetic/src/Assetic/AssetWriter.php:106
Stack trace:
#0 /generate_assets/vendor/kriswallsmith/assetic/src/Assetic/AssetWriter.php(65): Assetic\AssetWriter::write('public/', '*{color:green}?...')
#1 /generate_assets/vendor/kriswallsmith/assetic/src/Assetic/AssetWriter.php(54): Assetic\AssetWriter->writeAsset(Object(Assetic\Asset\GlobAsset))
#2 /generate_assets/run(31): Assetic\AssetWriter->writeManagerAssets(Object(Assetic\AssetManager))
#3 {main}
  thrown in /generate_assets/vendor/kriswallsmith/assetic/src/Assetic/AssetWriter.php on line 106

つまり、asseticは「public /basecss.css」ではなく「public」という名前のファイルをダンプしようとしているようです。何か助けはありますか?

PS解像度:

Ok。すっごく。どうやら私は実行する必要があります

$css->setTargetPath('css_file_name.css');   

そしてそれはうまくいきました...

4

1 に答える 1

2

ドキュメントから完全には明らかではありませんが、Dumping Assets to static filesセクションで言及されています

$writer->writeManagerAssets($am);

「アセットのターゲット パスを利用します。」そうです、アセットを書き込む前にターゲットパスを設定することを提案したように、問題は解決します:

$css->setTargetPath('css_file_name.css');   
于 2014-02-09T17:06:32.050 に答える