在Yii控制台应用程序中获取基本URL

7
如何在Yii的CConsoleApplication应用程序中获取基本URL?
我尝试使用Yii::app()->request->getBaseUrl(true),但出现以下错误。
未定义索引:SERVER_NAME(/var/www/yii/framework/web/CHttpRequest.php:279)

控制台中的URL?您能给出所需结果的示例吗? - Evgeniy Chekan
5个回答

13

在控制台应用程序中不存在请求对象。在 Web 应用程序中,请求对象是CHttpRequest的一个实例。如果您正在离线任务中生成 URL,则必须以其他方式配置 baseUrl,例如在配置文件中:

"request" => array(
    'hostInfo' => 'http://localhost',
    'baseUrl' => '/yii-project/index-test.php',
),

// OR

'request' => array(
    'hostInfo' => 'http://localhost',
    'baseUrl' => '/yii-project',
    'scriptUrl' => 'index-test.php',
),

谢谢,我应该把这个放在哪里? - Harish Ambady
这应该放在您的控制台配置文件中的组件部分,通常是protected/config/console.php。 - Asgaroth
3
在尝试设置hostInfo时出错,错误信息为“属性'CConsoleApplication.request'为只读属性”。 - user1954544
@user1954544,你应该把它放在“components”数组中,然后放到根配置中; - alexglue

3
对于 Yii2 高级模板,如果在 console 或 common 应用程序的 config 目录中不存在 params.php 文件,则创建该文件,并将以下代码粘贴到其中:
return [
   'frontendUrl' => 'http://yourdomain.com'
];

这样就可以在控制台中以以下方式访问:

echo Yii::$app->params['frontendUrl'];

0

你需要在config/console.php文件的components数组中添加

'request' => array(
    'hostInfo' => 'http://localhost',
    'baseUrl' => '',
    'scriptUrl' => '',
),

还要添加urlManager,这样它就会从URL中移除index.php?r=site/action,而你将拥有美观的URL。
'urlManager' => array(
    'urlFormat' => 'path',
    'showScriptName' => false,
    'rules' => array(
        '<controller:\w+>' => '<controller>/index',
        '<controller:\w+>/<id:\d+>' => '<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
    ),
),

-3

-3
请尝试以下方法获取基本的URL页面:
echo Yii::app()->getBaseUrl(true);

应用程序基本路径在文件系统中如何与基本URL相关联? - Evgeniy Chekan
它返回的是基本路径而不是基本URL。 - Harish Ambady
2
这个适用于网络应用程序,但在控制台应用程序中不适用。 - alumi
1
@VinothBabu 我需要这个。谢谢。 - unknownbits
1
请不要在没有进行适当测试的情况下放置负数,这是可行的代码。 - Elby
伟大的Elby。请问您的电子邮件地址是多少?我想与您联系。 - Vinoth Babu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接