【问题标题】:How to reuse laravel controller code in custom command如何在自定义命令中重用 laravel 控制器代码
【发布时间】:2019-02-13 15:19:31
【问题描述】:

我有一个控制器文件,它有一个登录(验证并返回一个令牌)到某个第三方门户的函数 login()。现在我想在自定义命令中重用该控制器功能。请建议如何这样做。我的控制器文件看起来像这样-

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
class mmt extends Controller {
public function login() {
 //code to login to third party portal
 // returns a token after successful login
}

我位于 app/Console/Commands 中的自定义命令文件如下所示-

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class RcvSurveyEmails extends Command {
   protected $signature = 'RcvSurveyEmails:name';
   protected $description = 'command description here';
   public function handle(){
  //I need to use the login() function here and get the token.
}
?>

我在网上搜索类似的解决方案,但没有任何问题

【问题讨论】:

    标签: php laravel controller


    【解决方案1】:

    您可以通过两种方式做到这一点:

    方法一
    Use Trait

    trait LoginTrait{
       public function Login(){
       //put your code here
       }
    }
    

    然后你可以在你的类中使用你的函数,如下所示:

    namespace App\Http\Controllers;
    use Illuminate\Http\Request;
    class mmt extends Controller {
      use LoginTrait;//login is now available inside your class
    
      //rest of your codes
    }
    

    在你的指挥下,它会像下面这样:

    namespace App\Console\Commands;
    use Illuminate\Console\Command;
    class RcvSurveyEmails extends Command {
       use LoginTrait;//login Function is now avaiable inside your Command and you can call it
       protected $signature = 'RcvSurveyEmails:name';
       protected $description = 'command description here';
    
       public function handle(){
       login();//login function
       }
    }
    

    方法二

    如果您的控制器类没有任何特殊的constructor,您可以在command 中从您的控制器创建一个实例,然后调用您的方法,如下所示:

    namespace App\Console\Commands;
    use Illuminate\Console\Command;
    use App\Http\Controllers\mmt;
    class RcvSurveyEmails extends Command {
       protected $signature = 'RcvSurveyEmails:name';
       protected $description = 'command description here';
    
       public function handle(){
       $controller = new mmt();//your controller name
       $controller->login();
       }
    }
    
    
    

    【讨论】:

    • 你必须把 use 放在文件的开头...像这样:use App\Http\Controllers\mmt;
    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多