Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CakePHP3中,如何在Shell中使用UrlHelper生成URL?_Shell_Cakephp - Fatal编程技术网

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

在CakePHP3中,如何在Shell中使用UrlHelper生成URL?,shell,cakephp,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. 但我想,我在壳牌公司是看不到的 谢谢。在sh

使用电子邮件,我只是

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.
但我想,我在壳牌公司是看不到的


谢谢。

在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
    }
}

在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
    }
}

在shell中使用助手不是正确的方法。助手也只是包装。因此,请直接使用路由器:

use Cake\Routing\Router;
$url = Router::url([/*...*/], true);
还要注意,您可以根据需要通过调用
Router::fullBaseUrl()
来更改基本URL,它是一个getter和setter。看

这更好,因为:

  • 它引入了更少的依赖性
  • 不那么紧密的耦合(好吧,你得到的是一个单态…)
  • 不违反MVC
  • 更小的足迹

    • 在shell中使用助手不是正确的方法。助手也只是包装。因此,请直接使用路由器:

      use Cake\Routing\Router;
      $url = Router::url([/*...*/], true);
      
      还要注意,您可以根据需要通过调用
      Router::fullBaseUrl()
      来更改基本URL,它是一个getter和setter。看

      这更好,因为:

      • 它引入了更少的依赖性
      • 不那么紧密的耦合(好吧,你得到的是一个单态…)
      • 不违反MVC
      • 更小的足迹

      我不知道Url帮助器封装了路由器,因此我同意您关于依赖关系和耦合的看法,但是我礼貌地不同意打破MVC惯例,因为Shell脚本的范围并不特别适合于范例中的三个字母中的任何一个。shell脚本可以作为业务逻辑进行论证,但大多数shell仍然作为表级逻辑的抽象存在,它接受参数的方式与控制器接受请求对象输入的方式大致相同。我很想听听你的想法,Burzum。一个外壳可以看作是一种控制器,但实际上没有“视图”层。我完全不同意“但是大多数shell仍然作为表级逻辑的抽象存在”,如果它是“表”逻辑,那么它应该在表(或其他模型层对象)中实现并作为表级逻辑使用。一个视图(也有shell帮助程序)需要一个视图对象才能工作,这应该是一个明确的指标,表明它不应该(从技术上讲它可以)在shell中使用。一个shell方法应该是skinny的,其他一些“M”层类型的类应该可以完成这项工作。同意-我想我误解了我自己。我所说的表逻辑的Shell实现是表对象本身中定义的逻辑的实现,而Shell充当一个瘦控制器,从命令行获取参数,然后将这些参数委托给表对象本身来完成繁重的工作。感谢您的投入,祝您新年快乐!我不知道Url助手封装了路由器,所以我同意您关于依赖关系和耦合的看法,但是我礼貌地不同意打破MVC惯例,因为Shell脚本的范围并不特别适合范例中的三个字母中的任何一个。shell脚本可以作为业务逻辑进行论证,但大多数shell仍然作为表级逻辑的抽象存在,它接受参数的方式与控制器接受请求对象输入的方式大致相同。我很想听听你的想法,Burzum。一个外壳可以看作是一种控制器,但实际上没有“视图”层。我完全不同意“但是大多数shell仍然作为表级逻辑的抽象存在”,如果它是“表”逻辑,那么它应该在表(或其他模型层对象)中实现并作为表级逻辑使用。一个视图(也有shell帮助程序)需要一个视图对象才能工作,这应该是一个明确的指标,表明它不应该(从技术上讲它可以)在shell中使用。一个shell方法应该是skinny的,其他一些“M”层类型的类应该可以完成这项工作。同意-我想我误解了我自己。我所说的表逻辑的Shell实现是表对象本身中定义的逻辑的实现,而Shell充当一个瘦控制器,从命令行获取参数,然后将这些参数委托给表对象本身来完成繁重的工作。感谢您的投入,祝您新年快乐!