【问题标题】:zend framework 2 constantsZend 框架 2 常量
【发布时间】:2013-05-04 07:43:16
【问题描述】:

我必须声明在应用程序中任何地方都可用的常量。 在 Zend Framework 1 中,我们曾经在 application.ini 中声明为:

constants.NAME_TITLE = "User Name",

在 Zend Framework 2 中我们在哪里以及如何做到这一点?

【问题讨论】:

  • 这些常量有什么用?在哪里使用它们?
  • 没有框架你会怎么做?如果只有一个函数可以让你define 常量。
  • @Sam 这些常量用于定义我在配置中为 ex 设置的全局变量。 LINK_TO_SOAP_SERVICE ,它们的值对于不同的环境是不同的。所以我将它们设置在一个地方并在整个项目中使用它们。
  • @Crisp :我可以使用 php 中的 define() 来做到这一点,但如果在 zend 框架 2 中与 zend 框架 1 中一样,我想遵循推荐的方式

标签: php zend-framework2 constants


【解决方案1】:

您可以按如下方式定义、分配和访问 CONSTANT: 将这两个类与别名一起使用:

use Zend\Config\Config as Zend_Config;
use Zend\Config\Processor\Constant as Zend_Constant;

然后将以下代码用于控制器类的任何功能:

define ('TEST_CONST', 'bar');
// set true to Zend\Config\Config to allow modifications
$config = new Zend_Config(array('foo' => 'TEST_CONST'), true);
$processor = new Zend_Constant();
$processor->process($config);
echo $config->foo;

它会给出 o/p:

bar

【讨论】:

    【解决方案2】:

    对于 Zend Framework 2,另一种解决方案。

    你可以在 config/autoload/local.php 中定义你的全局变量

     'array_name' => array(
          'variable_name' => value,
     ),
    

    并在任何地方使用它,就像:

    $this->config = $obj->getServiceLocator()->get('config'); //create config object
    $this->you_variable = $this->config['arrayname']['variable_name']; // fetch value
    echo $this->you_variable; // print value
    

    【讨论】:

    • 什么是 $obj ?你不认为它会出错吗?
    • 如果您使用的是 PHP 5.4 或更高版本,您可以在 1 行中完成,如下所示:echo $obj->getServiceLocator()->get('config')['arrayname']['variable_name'];
    【解决方案3】:

    我找到了解决方案here。您必须在模型中创建存储类。在该类中,您可以根据需要创建任意数量的常量。

    <?php  
    namespace Application\Model;
    class Application {
        const EMAIL = 'email@gmail.com';
    }
    

    现在可以通过以下方式在任何地方访问它:

    NameOfModule\Model\NameOfModel::NAMEOFCONSTANT
    

    例如,您可以在这样的视图中打印常量:

    <?php echo Application\Model\Application::EMAIL; ?>
    

    【讨论】:

    • 谢谢!我还通过序列化将数组放入其中:stackoverflow.com/questions/1290318/… 减少模块中的大量重复代码!
    • const UPLOAD_PATH = getcwd() 。 '/公共/上传/';为什么会产生错误?
    【解决方案4】:

    您还可以编写可在应用程序的任何位置(如控制器、模型和视图)访问的函数和变量。

    <?php  
    namespace Webapp;
    
    class ControllerName
       {
            const EMAIL     = 'email@gmail.com';
    
            public static function myFunction()
              {
                 echo "doing work well.";
              }
        }
    

    你可以像这样访问这个类的函数和属性

    <?php echo Webapp\ControllerName::EMAIL; ?> 
    

    <?php echo Webapp\ControllerName::myFunction(); ?>
    

    【讨论】:

    • 你说的在技术上是正确的。为了澄清起见,通常没有人应该将常量和静态方法放在控制器中(除非在极少数情况下,它们只能在该控制器中不属于任何地方)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多