我正在DarkBee的帮助下使用此方法
$detect = new Mobile_Detect;
class Project_Twig_Extensions extends Twig_Extension{
public function getFunctions(){
return array(new Twig_SimpleFunction('detectDevice', function() use($detect){
if($detect->isMobile()){
return true;
} else {
return false;
}
}));
}
}
我正在Twig中使用
{% if detectDevice %}
没有传递值并且没有满足条件,因此检查文档我写了另一种方法,以防万一 https://twig.symfony.com/doc/2.x/advanced.html#functions
$twig = new Twig_environment($loader);
$function = new Twig_Function('detectDevice', function() use($detect){
if($detect->isMobile()){
return true;
} else {
return false;
}
});
$twig->addFunction($function);
虽然也没有传递任何值,但是由于DarkBee,我的500个服务器错误已愉快地停止了,但是我似乎仍然无法正确地将其传递给Twig。
我在将出色的Mobile_Detect插件安装到我的Opencart 3.0项目(https://github.com/serbanghita/Mobile-Detect)时遇到了很大的麻烦,我已经将其插入并成功检查了该设备在php中是台式机还是移动设备。
我学会了将php检查传递到树枝,我可以将其添加到全局变量中
$twig = new Twig_Environment($loader);
$mobTwig->addGlobal('isMobile', true);
或创建扩展树枝的公共功能
require_once(DIR_SYSTEM . 'detect/mobiledetectlib/Mobile_Detect.php');
$detect = new Mobile_Detect;
$detectFunction = new function(){
if($detect->isMobile()){
return true;
} else {
return false;
}
}
class Project_Twig_Extensions extends Twig_Extension{
public function getFunctions(){
return array(new Twig_SimpleFunction('detectDevice', '$detectFunction'));
}
}
两个选项均返回500 Internal Server Error,并立即停止页面加载。在过去的几天里,我不知道为什么。没有多少谷歌搜索对我有帮助。有谁知道为什么会这样?
答案 0 :(得分:0)
您发布的代码中存在很多问题:
在fun zipAll(directory: String, zipFile: String) {
val sourceFile = File(directory)
ZipOutputStream(BufferedOutputStream(FileOutputStream(zipFile))).use {
zipFiles(it, sourceFile)
}
}
private fun zipFiles(zipOut: ZipOutputStream, directory: File) {
val data = ByteArray(1024)
zipOut.use {
if (directory.isDirectory) {
//Adding directory
it.putNextEntry(ZipEntry(directory.name))
} else {
zipFiles(zipOut, directory)
}
for (f in directory.listFiles()) {
if (!f.name.contains(".zip") && f.exists()) {
//Adding file
FileInputStream(f).use { fi ->
BufferedInputStream(fi).use { origin ->
val entry = ZipEntry(f.name)
it.putNextEntry(entry)
while (true) {
val readBytes = origin.read(data)
if (readBytes == -1) {
break
}
it.write(data, 0, readBytes)
}
}
}
}
}
}
}
中,您无法实例化PHP
,仅使用此语法即可定义一个统一的函数
new function()
在函数$foo = function() {
return 'foo';
}
echo $foo(); //output: foo
中,您试图访问变量$detectMobile
,但是该变量未在自动函数的scope中定义。
要在函数中正确使用$detect
,您需要使用语言构造use
。
$detect
您还可以使用global
语言构造,但不建议这样做
$detectFunction = new function() use($detect) {
if ($detect->isMobile()) return true;
else return false;
}
请勿使用quotes传递实例变量。
使用$detectFunction = new function() {
global $detect;
if ($detect->isMobile()) return true;
else return false;
}
将告诉new Twig_SimpleFunction('detectDevice', '$detectFunction')
运行全局函数twig
使用$detectFunction
将尝试将自动函数转换为字符串。不可能
传递匿名函数的唯一正确方法是传递引用:
new Twig_SimpleFunction('detectDevice', "$detectFunction")
现在,如果将所有内容组合在一起,您将可能会变成这样
new Twig_SimpleFunction('detectDevice', $detectFunction)
甚至更好
class Project_Twig_Extensions extends Twig_Extension{
public function getFunctions() {
$detect = new Mobile_Detect();
return array(new Twig_SimpleFunction('detectDevice', function() use($detect) {
if ($detect->isMobile()) return true;
else return false;
}));
}
}
关于遗失的笔记,请确保在开发时show all errors。