代码之家  ›  专栏  ›  技术社区  ›  Lynob

流明:使用动作布线

  •  1
  • Lynob  · 技术社区  · 6 年前

    在我的公司,我们使用一个建在管腔上的框架。我们不写路线。我们写行动。

    例如:

    app/api/Food/AddFoodAction.php
    app/api/food/EditFoodAction.php
    

    如果你想添加食物,你可以点击邮差。

    {{host}}/api/food/AddFood
    {{host}}/api/food/EditFood
    

    一个典型的动作看起来像这样

    class AddFoodAction
    {
        protected $verbs = ['POST'];    
        public $inputRules = [
        'name' => 'required',
        'description' => ''
        ];
        public function execute()
        {
            $name = $this->request->get('name');
    
            try {
                ...
    
                return $this->response->statusOk();
            }
            catch(\Exception $ex) {
                return $this->response->statusFail("");
            }
        }
    }
    

    我只是对它的路由部分感兴趣,不写路由的想法,只写动作。我希望在其他项目中使用相同的概念,而不必使用我公司使用的框架。

    你知道怎么做到的吗?我搜索了动态路由,但这不是动态路由,您知道使用的概念的名称是什么吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sven Hakvoort    6 年前

    我想这是通过动态类名完成的,在那里您将有一个“真正的”端点来捕获所有参数,然后通过这些信息,您可以生成完整的CLAS路径。

    例如,如果您导航到 {{host}}/api/food/AddFood 您的代码将提取 /food/AddFood 部分。然后对该部分进行分析,以便生成 app/api/Food/AddFoodAction (即,通过骆驼壳和 /app/api )与命名空间+类名匹配。

    如果它存储在一个变量中,那么您可以动态地调用这个类,在这个类中,它将产生如下结果:

    // this would be dynamically build, but is hardcoded to illustrate the example
    $className = "\app\api\Food\AddFoodAction";
    $action = $className();
    $action->execute();
    

    希望这对您有所帮助,如果您有任何问题,请随时咨询!

    请注意,名称需要使用 命名空间 而不是文件夹路径