1

在 AppController 中:

function beforeFilter() {

    $company = 'name of Company';

    $this->set(compact('company'));

}

在控制器类中:

function companyinfo() {
    $logo = '<div><?php $this->Html->image('logo'); ?></div>';
    $welcome = 'welcome to $$company!';

    $this->set(compact('logo','welcome'));
}

function beforeFilter() {
    parent::beforeFilter();
}

在视图类中:

<html>
    <body>
        <?php echo $logo; ?>
        <?php echo $welcome; ?>
    </body>
</html>

通过控制器从 AppController 传递变量后,它不会在视图中回答变量。

4

2 回答 2

2

1)当您使用$this->set(compact('company'));时,它不会设置用于任何控制器的变量 - 它正在传递$company给视图。

2)您正在尝试使用帮助程序(仅在视图中可用)在字符串中编写 PHP 代码

$logo = '<div><?php $this->Html->image('logo'); ?></div>';

3)想要将数据从 AppController 传递到 Controller 到 View 是不寻常的。

您可能想要做的是这样的事情:

//App Controller 
function beforeFilter() {
    $company = 'name of Company';
    $this->set(compact('company'));
}

//Controller
function companyinfo() {
    $logo = 'logo';
    $this->set(compact('logo'));
}

//Layout file (or view file, but I assume it's layout since you're getting data in the AppController)
<?php
echo '<div>' . $this->Html->image($logo) . '</div>';
echo "Welcome to " . $company;

我的意思是尽可能以最具建设性的方式(我们都去过那里)。您似乎在为一些通用的 PHP 概念而苦苦挣扎。在您过分沉迷于 CakePHP 之前,我建议您尝试一些关于通用 PHP 的冗长教程——然后当您对它感到完全满意时,再深入研究 CakePHP。

于 2012-07-09T13:36:03.630 回答
0

为了让公司进入视图,如果您希望它在整个站点的所有视图中可用,或者如果您只希望它在您设置它的功能的视图中可用,则可以在您的 appcontroller 中设置它。无论哪种方式,您都需要正确使用 set 功能。例如:

$this->set('company', 'Name of Company');

或者

$company = 'Name of Company';
$this->set('company', $company);

之后,您将能够访问$company视图中的变量。

echo $company;输出Name of Company

至于你对戴夫的问题:

<?php $welcome = 'Welcome to $$company'; ?> <html><body><?php echo $welcome; ?></body></html>

将被写为:

<html><body><?php echo "Welcome to ". $company; ?></body></html>

但是,您应该真正考虑将布局与 cakephp 一起使用,这样您就不需要<html>, <head>, <body>, etc.每个视图文件中的标签

于 2012-07-09T21:16:07.643 回答