本文概述
- 1.安装scssphp
- 2.使用编译器
scssphp是用纯PHP编写的SCSS编译器库, 可以将scssphp包含在任何项目中。它包括一个命令行工具, 用于从终端/ shell或脚本中运行编译器。在本文中, 你将学习如何在Symfony 3项目中使用它。
1.安装scssphp安装库以在PHP中编译sass的首选方法是通过composer, 因此切换到项目的目录并使用以下命令进行安装:
composer require leafo/scssphp
安装后, 你将可以在控制器或symfony服务中使用软件包的Compiler类。有关此库的更多信息, 请在此处访问官方文档或Github上的官方存储库。
2.使用编译器如前所述, 该库非常易于使用, 并且文档很好。提供许多功能, 例如使用PHP声明变量(预设变量), 自定义导入路径等。我们将向你展示如何使用Symfony控制器中的编译器完成最典型的任务:
A.编译SCSS字符串并返回CSS响应
创建一个编译器实例, 并以SCSS字符串作为第一个参数运行compile方法。这将以字符串形式返回CSS结果, 你可以使用该字符串作为响应在控制器中发送:
<
?phpnamespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException;
// Use the Sass compileruse Leafo\ScssPhp\Compiler;
class DefaultController extends Controller{/*** @Route("/", name="homepage")*/public function indexAction(Request $request){// Create an instance of the Sass Compiler class$scss = new Compiler();
// Sass String$sassString = '$color: #abc;
div { color: lighten($color, 20%);
}';
// Compile the sass string and store the CSS result in another variable$css = $scss->
compile($sassString);
// Return a response of CSS Type$response = new Response();
$response->
setContent($css);
$response->
setStatusCode(Response::HTTP_OK);
$response->
headers->
set('Content-Type', 'text/css');
return $response;
}}
B.编译SCSS文件并写入CSS文件
编译器库不提供从文件写入另一个文件的方法, 因此你将必须获取编译器的输出并将其写入新文件。以下示例显示如何将all.scss文件编译为all.css文件:
注意如果你不喜欢使用普通的PHP方法读取和写入文件(file_put_contents和file_get_contents), 则可以改用Symfony的Filesystem包。
<
?phpnamespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException;
// Use the Sass compileruse Leafo\ScssPhp\Compiler;
class DefaultController extends Controller{/*** @Route("/", name="homepage")*/public function indexAction(Request $request){// Create an instance of the Sass Compiler class$scss = new Compiler();
// Path to the folder of the sass files$sassFilesPath = $this->
get('kernel')->
getRootDir() . '/../web/assets/sass/';
// Path to the folder of css files$cssFilesPath = $this->
get('kernel')->
getRootDir() . '/../web/assets/css/';
// Write output css filefile_put_contents($cssFilesPath. "all.css", // Set the content of all.css the output of the// sass compiler from the file all.scss$scss->
compile(// Read content of all.scssfile_get_contents($sassFilesPath. "all.scss")));
return new Response("Sass File Succesfully compiled");
}}
C.更改CSS输出格式
默认情况下, 编译器使用嵌套输出格式化程序, 该格式化程序输出以下类型的CSS:
.navigation ul {line-height: 20px;
color: blue;
}.navigation ul a {color: red;
}.footer .copyright {color: silver;
}
在某些情况下, 你可能需要代码的可读版本, 甚至是精简版本。编译器允许你使用setFormatter方法使用其自定义格式化程序之一来更改输出的样式:
<
?phpnamespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException;
// Use the Sass compileruse Leafo\ScssPhp\Compiler;
class DefaultController extends Controller{/*** @Route("/", name="homepage")*/public function indexAction(Request $request){// Create an instance of the Sass Compiler class$scss = new Compiler();
// Add the expanded formatter to produce a readable format of CSS$scss->
setFormatter(new \Leafo\ScssPhp\Formatter\Expanded());
// Other possible formatters://Leafo\ScssPhp\Formatter\Expanded//Leafo\ScssPhp\Formatter\Nested (default)//Leafo\ScssPhp\Formatter\Compressed//Leafo\ScssPhp\Formatter\Compact//Leafo\ScssPhp\Formatter\Crunched// Path to the folder of the sass files$sassFilesPath = $this->
get('kernel')->
getRootDir() . '/../web/assets/sass/';
// Path to the folder of css files$cssFilesPath = $this->
get('kernel')->
getRootDir() . '/../web/assets/css/';
// Write output css filefile_put_contents($cssFilesPath. "all.css", // Set the content of all.css the output of the// sass compiler from the file all.scss$scss->
compile(// Read content of all.scssfile_get_contents($sassFilesPath. "all.scss")));
return new Response("Sass File Succesfully compiled");
}}
应改为产生以下CSS:
.navigation ul {line-height: 20px;
color: blue;
}.navigation ul a {color: red;
}.footer .copyright {color: silver;
}
D.捕获编译器异常
在某些情况下, 你的CSS可能无效, 因此编译器将抛出一个异常, 你可以简单地捕获它:
<
?phpnamespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException;
// Use the Sass compileruse Leafo\ScssPhp\Compiler;
class DefaultController extends Controller{/*** @Route("/", name="homepage")*/public function indexAction(Request $request){try{// Create an instance of the Sass Compiler class$scss = new Compiler();
// Sass String$sassString = 'div { color: lighten($color, 20%);
}';
// Compile the sass string and store the CSS result in another variable$css = $scss->
compile($sassString);
// Return a response of CSS Type$response = new Response();
$response->
setContent($css);
$response->
setStatusCode(Response::HTTP_OK);
$response->
headers->
set('Content-Type', 'text/css');
return $response;
}catch(\Exception $e){return new Response("SCSS Compiler Error: " . $e->
getMessage());
}}}
例如, 先前的代码将引发异常:SCSS编译器错误:未定义的变量$ color:行:1
【如何在Symfony 3中使用纯PHP编译SASS(scss)】编码愉快!
推荐阅读
- 如何在Symfony 3.3中为单个字段(文档实体)配置文件上传器
- 如何使用MySQL Workbench将MS SQL Server数据库(从SQL Server Management Studio)迁移到MySQL
- 如何在Winforms中为单个键注册单个或多个全局热键
- 什么是PHP Year 2038(Y2K38)错误以及如何解决它
- 如何从PHP中的2个值计算百分比变化(增加和减少)
- 在Symfony 3中将Bootstrap 4分页控制布局与KnpPaginatorBundle一起使用
- 如何在Symfony 3中使用PHP将PDF转换为图像
- 如何使用BeSimpleI18nRoutingBundle在Symfony 3中处理路由国际化
- 如何在Unity3d游戏中检索Android安装引荐来源网址