【问题标题】:how to create global variable in cakephp 3.4如何在 cakephp 3.4 中创建全局变量
【发布时间】:2017-05-24 13:14:56
【问题描述】:

我正在使用 CakePHP 3.4 并想创建一个全局变量来存储 可以在整个应用程序中使用的一些信息。

我试过这段代码 在s.ctp 这是我正在编写的第一个控制器

 <?php
 namespace App\Controller;
 use Cake\Controller\Controller;
 use Cake\Event\Event;
 use Cake\Core\Configure;

 Configure::write('variable_name', 'Some Value');
  ?>

并在我的代码所在的p.ctp 中获取这个全局变量

 <?php 
 namespace App\Controller;
 use Cake\Controller\Controller;
 use Cake\Event\Event;
 use Cake\Core\Configure;

echo Configure::read('variable_name');
 ?>

echo 中没有显示我做错了什么?

【问题讨论】:

  • *.ctp 文件用于Views。阅读 MVC,然后学习 CakePHP 教程。

标签: cakephp cakephp-3.0


【解决方案1】:

您想在 bootstrap.php 或 AppController 中初始化全局变量。如果您在AppController 中执行此操作,您希望在initialize() 方法中执行此操作:-

public function initialize()
{
    parent::initialize();
    Configure::write('variable_name', 'Some Value');
}

然后你应该很好地在你的视图模板中使用它,如你的问题所示。

【讨论】:

  • 公共函数initialize() { parent::initialize();配置::write('variable_name', 'Some Value'); }
  • 我不确定您所说的“使用另一个控制器”是什么意思。如果您希望在您的应用程序中全局访问它,您需要在AppController 中使用它。如果您只需要为特定控制器设置它,那么您可以在该控制器的 initialize 方法中设置它。
  • 嘿,谢谢您的回复,我想在 s.ctp 文件中的 bootstrap.php 中声明的变量中写入一些值,同时我必须读取另一个控制器 p.ctp ,我该怎么做呢
  • 您似乎执着于尝试在一个模板中设置变量并在另一个模板中引用它。这不是它的工作原理。真的,“从 s.ctp 在 bootstrap.php 中声明”没有多大意义。似乎您需要阅读更多关于 MVC 概念的内容,以了解各个部分是如何组合在一起的。
【解决方案2】:

我认为您想将此数据存储在Session Object

$name = $this->request->session()->read('User.name');

// If you are accessing the session multiple times,
// you will probably want a local variable.
$session = $this->request->session();
$name = $session->read('User.name');


$session->write('first_access', true);
$first_access = $session->read('first_access');

【讨论】:

  • 我不想使用会话我想使用全局变量你能帮我吗
  • 我认为这是最好的方式,除非你想存储配置数据。
  • 要存储配置数据,您应该使用Cake\Core\Configure,如果您愿意,我会编辑问题添加示例。
  • @drmonkeyninja 嘿,感谢您的回复,我想在 s.ctp 文件中在 bootstrap.php 中声明的变量中写入一些值,同时我必须读取另一个 p 控制器.ctp,我该怎么做
猜你喜欢
  • 2014-11-29
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多