Yaf 命令列模式爬坑

declandragon發表於2019-08-13

使用 yaf 框架做一個訊息佇列,執行命令的時候一直找不到對應的控制器,爬坑2小時,原來是Git Bash 的鍋。

開發環境

windwos 10

PHP 7.3

Yaf 3.0.8

問題重現

/root_path/shell/index.php

<?php
if (empty($argv[1])) {
    exit('command error');
}

ini_set('display_errors', 'on');
error_reporting(E_ALL);

define('IS_CLI', true);
define('APP_PATH', realpath(__DIR__.'/../'));

date_default_timezone_set('Asia/Shanghai');
require_once APP_PATH.'/vendor/autoload.php';

$app = new Yaf_Application(APP_PATH.'/conf/application.ini', 'common');
$app->bootstrap()->getDispatcher()->dispatch(new Yaf_Request_Simple());

Git Bash中執行命令php index.php request_uri=/cli/Notify/login 輸出如下

Failed opening controller script D:\wnmp\www\bitell\Middleman/app\controllers\:.php: No such file or directory

index.php 改成這樣

<?php
$request = new Yaf_Request_Simple();
print_r($request);
die;

再執行命令 php index.php request_uri=/cli/Notify/login 輸出如下

Yaf_Request_Simple Object
(
    [module] =>
    [controller] =>
    [action] =>
    [method] => CLI
    [params:protected] => Array
        (
        )

    [language:protected] =>
    [_exception:protected] =>
    [_base_uri:protected] =>
    [uri:protected] => :/Program Files/Git/cli/Notify/login
    [dispatched:protected] =>
    [routed:protected] =>
)

uri 尋找 Git Bash 的安裝目錄去了,所以找不到我的控制器了

Windows PowerShell中 執行命令 php index.php request_uri=/cli/Notify/login 輸出如下

Yaf_Request_Simple Object
(
    [module] =>
    [controller] =>
    [action] =>
    [method] => CLI
    [params:protected] => Array
        (
        )

    [language:protected] =>
    [_exception:protected] =>
    [_base_uri:protected] =>
    [uri:protected] => cli/Notify/login
    [dispatched:protected] =>
    [routed:protected] =>
)

還原index.php 就可以正常使用了,爬出來了

本作品採用《CC 協議》,轉載必須註明作者和本文連結
感謝閱讀,有收穫的話不妨點個贊:smiling_imp:

相關文章