2

我正在使用一个非常简单的代码来测试 phpsass

$sass = new SassParser();
$c = file_get_contents('/_www/_projects/cdn/public_html/test/test.sass');
$css = $sass->toCss($c);

sass 文件非常基础:

$blue: #3bbfce;
$margin: 16px;

table.hl {
  margin: 2em 0;
  td.ln {
    text-align: right;
  }
}

li {
  font: {
    family: serif;
    weight: bold;
    size: 1.2em;
  }
}

.content-navigation {
  border-color: $blue;
  color:
    darken($blue, 9%);
}

.border {
  padding: $margin / 2;
  margin: $margin / 2;
  border-color: $blue;
}

我收到以下错误:

致命错误:第 201 行 D:\_www\_git\phpsass\script\literals\SassNumber.php 中的未捕获异常 'SassNumberException' 和消息'

SassNumberException: Number must be a number: Array::26 Source: padding: $margin / 2; 在 D:\_www\_git\phpsass\script\literals\SassNumber.php 第 201 行

如果它可以帮助,也有以下通知之前抛出(我试图改变error_reporting级别,但通知消失当然没有解决问题):

注意:第 25 行 D:\_www\_git\phpsass\SassException.php 中的数组到字符串转换

如果我在http://www.phpsass.com/try/上对他们的在线 PHP 编译器使用相同的 sass 代码,它会正确编译......我不明白

4

3 回答 3

3

看看SassParser 类。该函数toCss()有第二个参数$isFile,默认为true

public function toCss($source, $isFile = true) {
    return $this->parse($source, $isFile)->render();
}

如果您注意到,您传递的是源而不是文件名。您可以像这样传递文件名:

$sass = new SassParser();
$c = '/_www/_projects/cdn/public_html/test/test.sass';
$css = $sass->toCss($c);

或者做你想做的事情,但在 上加上一个额外的参数toCss()

$sass = new SassParser();
$c = file_get_contents('/_www/_projects/cdn/public_html/test/test.sass');
$css = $sass->toCss($c, false);
于 2013-03-07T20:14:10.197 回答
2

您的 sass 文件根本不是真正的 sass;这将是正确的语法,基本上去掉所有尾随分号:

$blue: #3bbfce
$margin: 16px

table.hl {
  margin: 2em 0
  td.ln {
    text-align: right
  }
}

li {
  font: {
    family: serif
    weight: bold
    size: 1.2em
  }
}

.content-navigation {
  border-color: $blue
  color
    darken($blue, 9%)
}

.border {
  padding: $margin / 2
  margin: $margin / 2
  border-color: $blue
}

或者,就像您建议的那样:

$sass = new SassParser(['syntax' => SassFile::SCSS]);
于 2013-03-14T03:27:45.337 回答
1

事实上,这是一个纯粹的语法问题。我试图从 sass 代码中删除变量,并意识到它有效 - 效果不佳(margin: 2em 0成为margin: 20)但不再有错误。

我从http://sass-lang.com/获取的 sass 片段不是 sass 而是 scss 格式。SassParser类有一个参数叫syntax,默认设置为'sass',调用时需要设置为scss $scss = new SassParser(['syntax' => 'scss'])

但是我需要解析一个字符串,而不是一个文件,但是如果你传递一个带有 scss 扩展名的文件,你就不需要这个额外的参数。

于 2013-03-08T05:25:13.273 回答