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)
这个想法是,渲染页面所需的所有数据都通过 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)