phpsass返回致命错误

时间:2013-03-05 13:55:34

标签: php sass

我使用非常简单的代码来测试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必须是数字:Array :: 26 Source:padding:$ margin / 2;在第201行的D:\ _ _ _ www \ _git \ phpsass \ script \ literals \ SassNumber.php

如果它可以提供帮助,之前还会发出以下通知(我试图更改error_reporting级别但是通知消失当然没有解决问题):

  

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

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

3 个答案:

答案 0 :(得分:3)

看看SassParser class。函数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);

答案 1 :(得分:2)

你的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]);

答案 2 :(得分:1)

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

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

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