在CakePHP 3中,如何在Shell中使用UrlHelper生成URL?

时间:2015-12-29 14:06:23

标签: shell cakephp

要使用电子邮件,我只是

use Cake\Network\Email\Email;
$email = new Email();

但尝试使用UrlHelper是不成功的。

由于

不成功
$url_helper = new UrlHelper;

因为它给了我

Argument 1 passed to Cake\View\Helper::__construct() must be an instance of Cake\View\View.

但我猜想,我不会拥有View in Shell。

感谢。

2 个答案:

答案 0 :(得分:4)

在shell中使用帮助程序不是解决此问题的正确方法。帮助者也只是包裹the Router。所以直接使用路由器:

use Cake\Routing\Router;
$url = Router::url([/*...*/], true);

另请注意,您可以通过调用Router::fullBaseUrl()根据需要更改基本网址,它是一个getter和setter。请参阅documentation

这更好,因为:

  • 引入较少的依赖
  • 不太紧密耦合(好的,你得到一个单身......)
  • 不违反MVC
  • 占地面积较小

答案 1 :(得分:-1)

你可能会按照类似的方法在shell中模拟一个帮助器,就像模拟一个帮助器进行单元测试一样。尝试:

<?php

use Cake\View\View;
use Cake\View\Helper\UrlHelper;

class FooShell extends Shell
{
    public $url_helper = null;

    public function bar()
    {
        $view = new View();
        $this->url_helper = new UrlHelper($view);
        // URL Helper functionality created here
    }
}

以下是我用于mocking out a helper in CakePHP 3的文档。