从cakePHP中的控制器输出超链接

Hip*_*jim 5 controller cakephp

我刚开始使用cakePHP,到目前为止情况还不顺利.

我有一个控制器来处理确认用户的电子邮件.在注册时,用户将在链接中收到带有确认码的电子邮件.根据它们给出的确认代码,控制器会给出不同的文本响应.其中一个响应包括一个超链接以便登录.

我正在尝试使用Html助手,但是虽然我已经将它加载到类顶部的$ helpers中,但是如果我然后使用App :: import然后实例化它,我只能使它工作.

简单地制作一个超链接似乎有点过分了!我有多少次加载同一个类?

无论我在网上看哪,它一直告诉我在控制器中使用帮助器是个坏主意,但我还应该如何获得链接呢?

所以我有

var $helpers = array('Html');
Run Code Online (Sandbox Code Playgroud)

在控制器的顶部,并:

if (isset($this->User->id)) { // Check the user's entered it right
  // Do some stuff to remember the user has confirmed
  // This is to load the html helper - supposedly bad form, but how else do I make the link?
  App::import('Helper', 'Html');
  $html = new HtmlHelper();
  $this->set('message', __("Your email address has been confirmed.", TRUE)." ".$html->link(__("Please log in", TRUE), array('controller' => "users", 'action' => "login" )));
} else {
  $this->set('message', __("Please check your mail for the correct URL to confirm your account", TRUE));
}
Run Code Online (Sandbox Code Playgroud)

在控制器的确认方法和

<div>
   <?php echo $message;?>
</div>
Run Code Online (Sandbox Code Playgroud)

在视图中输出结果消息

当然我在某个地方出错了 - 有人能解释一下吗?

dec*_*eze 15

你不应该在Controller中使用Helpers.正如@Lincoln指出的那样,你应该在View中构建链接.您可以在Controller中构造URL,因为URL基本上是数据,但链接是URL的特定介质(HTML)实现.

无论哪种方式,如果您想通过电子邮件发送它,您都需要创建一个完整的 URL(包括主机).最通用的方法是使用Router::url:

$fullUrl = Router::url(array('controller' => ...), true); // 'true' for full URL
Run Code Online (Sandbox Code Playgroud)

在Controller或View中执行此操作.要创建链接,请在视图中使用此链接:

echo $html->link('Title', $fullUrl);
Run Code Online (Sandbox Code Playgroud)


Lin*_*n B 3

这个想法是,渲染页面所需的所有数据都通过 set 发送到视图,然后使用助手在视图中完成任何条件逻辑或格式设置,因此在适当的时候发送整个查询结果(假设您需要更改链接)包括用户的屏幕名称,您会很方便)。

在控制器动作中

$this->set('user', $this->User);
Run Code Online (Sandbox Code Playgroud)

视图中(这略有不同,具体取决于您的 in <= 1.2 或 1.3

if ($user->id) //available because of Controller->set
{
    //1.2
    $link = $html->link(__("Please log in", TRUE), array('controller' => "users", 'action' => "login" ));
    //1.3
    $link = $this->Html->link(__("Please log in", TRUE), array('controller' => "users", 'action' => "login" ));
    echo __("Your email address has been confirmed.", TRUE)." $link";
}
else
{
    $this->set('message', __("Please check your mail for the correct URL to confirm your account", TRUE));
}
Run Code Online (Sandbox Code Playgroud)