Blade PHP 变量在本地 Laravel 项目中未定义,但在生产环境中未定义?
Blade PHP Variable undefined in Local Laravel Project but not Production?
我的 Laravel 项目中有一个非常奇怪的错误。我的 Blade 视图文件中的一些代码在服务器上运行完美,但在我的本地项目 VM 上运行失败。
简单代码为:
<?$class = 'abc';?>
<p><?=$class?></p> /* My local project fails here */
在我的本地 Laravel 项目中我收到错误:
exception 'ErrorException' with message 'Undefined variable: class
为什么不同?我真的很想知道为什么这会在服务器上运行但在本地失败。
服务器设置:
- CentOS 6.8 VPS
- Laravel版本
Laravel Framework version 5.2.45
- PHP版本
PHP 5.6.30 (cli) (built: Mar 11 2017 08:42:18)
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
本地设置:
- Windows 10
- 宅基地 VM
- Laravel版本
Laravel Framework version 5.2.45
- PHP版本
PHP 5.6.15-1+deb.sury.org~trusty+1 (cli)
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
with blackfire v1.6.0, https://blackfire.io, by Blackfireio Inc.
编辑: 根据史蒂夫的建议。如果我将代码更改为下面的代码,它就可以工作。怎么回事?
<?php $class = 'abc';?>
<p><?=$class?></p
可能是您无法在本地环境中使用短标记 <?
。检查本地 php.ini
文件中的 short_open_tag
值。
来自文档:PHP 还允许使用短开放标签
http://php.net/manual/en/language.basic-syntax.phptags.php
或者直接使用
<?php $class = 'abc'; ?>
而不是
<?$ $class = 'abc'; ?>
为了将我的评论扩展为答案,<?$class = 'abc';?>
可能是问题,<?
是一个简短的开放标签,默认情况下不启用(不要与 [=12= 混淆) ] 这是一个简短的回显标签,默认情况下启用)。
如果是这种情况,那么您应该使用以下内容编辑您的 php.ini:
short_open_tag = On
以匹配您的实时环境,或用 <?php
替换 <?
的所有实例(包括尾随 space,因此您不会捕捉到完全有效的 <?=
)在整个项目中。
通常禁用短开放标签,因为它们会导致阅读问题xml,所以我个人会选择第二个选项。
无论哪种方式都要保持一致。
我遇到了同样的问题,经过半天的工作终于发现了这个问题。检查组件文件夹应该以大写开头!
我的 Laravel 项目中有一个非常奇怪的错误。我的 Blade 视图文件中的一些代码在服务器上运行完美,但在我的本地项目 VM 上运行失败。
简单代码为:
<?$class = 'abc';?>
<p><?=$class?></p> /* My local project fails here */
在我的本地 Laravel 项目中我收到错误:
exception 'ErrorException' with message 'Undefined variable: class
为什么不同?我真的很想知道为什么这会在服务器上运行但在本地失败。
服务器设置:
- CentOS 6.8 VPS
- Laravel版本
Laravel Framework version 5.2.45
- PHP版本
PHP 5.6.30 (cli) (built: Mar 11 2017 08:42:18)
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
本地设置:
- Windows 10
- 宅基地 VM
- Laravel版本
Laravel Framework version 5.2.45
- PHP版本
PHP 5.6.15-1+deb.sury.org~trusty+1 (cli)
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans with blackfire v1.6.0, https://blackfire.io, by Blackfireio Inc.
编辑: 根据史蒂夫的建议。如果我将代码更改为下面的代码,它就可以工作。怎么回事?
<?php $class = 'abc';?>
<p><?=$class?></p
可能是您无法在本地环境中使用短标记 <?
。检查本地 php.ini
文件中的 short_open_tag
值。
来自文档:PHP 还允许使用短开放标签
http://php.net/manual/en/language.basic-syntax.phptags.php
或者直接使用
<?php $class = 'abc'; ?>
而不是
<?$ $class = 'abc'; ?>
为了将我的评论扩展为答案,<?$class = 'abc';?>
可能是问题,<?
是一个简短的开放标签,默认情况下不启用(不要与 [=12= 混淆) ] 这是一个简短的回显标签,默认情况下启用)。
如果是这种情况,那么您应该使用以下内容编辑您的 php.ini:
short_open_tag = On
以匹配您的实时环境,或用 <?php
替换 <?
的所有实例(包括尾随 space,因此您不会捕捉到完全有效的 <?=
)在整个项目中。
通常禁用短开放标签,因为它们会导致阅读问题xml,所以我个人会选择第二个选项。
无论哪种方式都要保持一致。
我遇到了同样的问题,经过半天的工作终于发现了这个问题。检查组件文件夹应该以大写开头!