使用Html助手在cakephp中生成链接

使用Html助手在cakephp中生成链接,html,cakephp,cakephp-2.3,Html,Cakephp,Cakephp 2.3,我试图使用Htmlhelper在我的控制器中简单地创建一个链接,尽管我添加了必要的helper,但出现了以下错误: 对非对象调用成员函数link() 可以在视图文件中使用辅助对象,但不能在控制器中使用 . 例如,在您的index.ctp中 echo $this->Html->link( __('My link'), 'http://www.example.com/', array('class' => 'button', 'target' =&g

我试图使用
Html
helper在我的控制器中简单地创建一个链接,尽管我添加了必要的helper,但出现了以下错误:

对非对象调用成员函数link()


可以在视图文件中使用辅助对象,但不能在控制器中使用 .

例如,在您的index.ctp中

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->
在控制器中启用Html帮助程序与在代码中相同

class ExamplesController extends AppController {
    $helpers = array('Html', 'Form');

    public function index() {
       //
    }
}

可以在视图文件中使用辅助对象,但不能在控制器中使用 .

例如,在您的index.ctp中

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->
在控制器中启用Html帮助程序与在代码中相同

class ExamplesController extends AppController {
    $helpers = array('Html', 'Form');

    public function index() {
       //
    }
}

可以在视图文件中使用辅助对象,但不能在控制器中使用 .

例如,在您的index.ctp中

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->
在控制器中启用Html帮助程序与在代码中相同

class ExamplesController extends AppController {
    $helpers = array('Html', 'Form');

    public function index() {
       //
    }
}

可以在视图文件中使用辅助对象,但不能在控制器中使用 .

例如,在您的index.ctp中

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->
在控制器中启用Html帮助程序与在代码中相同

class ExamplesController extends AppController {
    $helpers = array('Html', 'Form');

    public function index() {
       //
    }
}

这是一个好问题。我认为您对MVC和设计模式提供的关注点分离有点困惑。再来看看CakePHP如何实现MVC:

需要记住的重要一点是,您的控制器永远不应该关心创建
anchor
标记。这就是你的观点。由于助手是保持视图干燥的一种方法(不要重复自己的操作),因此有一种方法专门负责创建HTML元素非常方便。视图依赖于控制器来确定设置了哪些变量、它们的值以及加载了哪些帮助程序。有关控制器和模型行为的帮助器以及组件的详细信息,请查看其各个文档页:

  • 助手-
  • 组件-
  • 行为-
现在你对MVC有了更好的理解,让我们来看看你的具体问题。您希望在控制器中创建链接。我假设它可能是动态的,这取决于一些其他变量,所以我将继续讨论

您可以解决的一个常见问题是,您希望根据用户是否已登录显示登录/注销链接

在app/Controller/ExampleController.php中

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->
在你看来,你可以做一些简单的事情。在本例中,我选择默认布局是因为我希望每个呈现页面中都有链接app/View/Layouts/default.ctp

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->


我希望这有帮助。我知道一次可以把很多东西放在一起。

这是个好问题。我认为您对MVC和设计模式提供的关注点分离有点困惑。再来看看CakePHP如何实现MVC:

需要记住的重要一点是,您的控制器永远不应该关心创建
anchor
标记。这就是你的观点。由于助手是保持视图干燥的一种方法(不要重复自己的操作),因此有一种方法专门负责创建HTML元素非常方便。视图依赖于控制器来确定设置了哪些变量、它们的值以及加载了哪些帮助程序。有关控制器和模型行为的帮助器以及组件的详细信息,请查看其各个文档页:

  • 助手-
  • 组件-
  • 行为-
现在你对MVC有了更好的理解,让我们来看看你的具体问题。您希望在控制器中创建链接。我假设它可能是动态的,这取决于一些其他变量,所以我将继续讨论

您可以解决的一个常见问题是,您希望根据用户是否已登录显示登录/注销链接

在app/Controller/ExampleController.php中

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->
在你看来,你可以做一些简单的事情。在本例中,我选择默认布局是因为我希望每个呈现页面中都有链接app/View/Layouts/default.ctp

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->


我希望这有帮助。我知道一次可以把很多东西放在一起。

这是个好问题。我认为您对MVC和设计模式提供的关注点分离有点困惑。再来看看CakePHP如何实现MVC:

需要记住的重要一点是,您的控制器永远不应该关心创建
anchor
标记。这就是你的观点。由于助手是保持视图干燥的一种方法(不要重复自己的操作),因此有一种方法专门负责创建HTML元素非常方便。视图依赖于控制器来确定设置了哪些变量、它们的值以及加载了哪些帮助程序。有关控制器和模型行为的帮助器以及组件的详细信息,请查看其各个文档页:

  • 助手-
  • 组件-
  • 行为-
现在你对MVC有了更好的理解,让我们来看看你的具体问题。您希望在控制器中创建链接。我假设它可能是动态的,这取决于一些其他变量,所以我将继续讨论

您可以解决的一个常见问题是,您希望根据用户是否已登录显示登录/注销链接

在app/Controller/ExampleController.php中

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->
在你看来,你可以做一些简单的事情。在本例中,我选择默认布局是因为我希望每个呈现页面中都有链接app/View/Layouts/default.ctp

echo $this->Html->link(
    __('My link'), 
    'http://www.example.com/', 
     array('class' => 'button', 'target' => '_blank')
);
class ExampleController extends AppController {
    public $components = array('Auth');

    public $helpers = array('Html', 'Form');

    public function beforeRender() {
       parent::beforeRender();
       //if Auth::user() returns `null` the user is not logged in.
       if ($this->Auth->user() != null) {
           $logInOutText = 'Log out';
           $logInOutUrl = array('controller' => 'users', 'action' => 'login');
       } else {
           $logInOutText = 'Log in';
           $logInOutUrl = array('controller' => 'users', 'action' => 'logout');
       }
       $this->set(compact('logInOutText', 'logInOutUrl'));
    }
}
<!-- More HTML above -->
<?php
// "Html" in `$this->Html` refers to our HtmlHelper. Note that in a view file
// like a `.ctp`, `$this` referes to the View object, while above in the
// controller `$this` refers to the Controller object. In the case
// `$this->Html`, "Html" would refer to a component. The same goes for Models
// and behaviors.
echo $this->Html->link($logInOutText, $logInOutUrl); // Easy!
?>
<!-- More HTML below -->


我希望这有帮助。我知道一次可以把很多东西放在一起。

这是个好问题。我认为您对MVC和设计模式提供的关注点分离有点困惑。再看一眼