在我的Laravel应用程序的每个控制器中,我使用了所有这个命名空间:
use App\User;
use App\Http\Controllers\Controller;
use Google\Auth\OAuth2;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\App;
use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSession;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\AdWords\v201609\cm\CampaignService;
use Google\AdsApi\AdWords\v201609\cm\OrderBy;
use Google\AdsApi\AdWords\v201609\cm\Paging;
use Google\AdsApi\AdWords\v201609\cm\Selector;
use Google\AdsApi\AdWords\v201609\cm\SortOrder;
use Google\AdsApi\Common\OAuth2TokenBuilder;
我需要一种方法来避免在我的控制器中重复所有这些代码。我试图将它放在一个基本控制器中,然后从中扩展所有其他控制器,但它没有用。
我会很感激任何建议。
答案 0 :(得分:7)
如果您使用的是PHP 7,则可以对这些进行分组。
实施例
use Google\AdsApi\AdWords\v201609\cm\CampaignService;
use Google\AdsApi\AdWords\v201609\cm\OrderBy;
use Google\AdsApi\AdWords\v201609\cm\Paging;
use Google\AdsApi\AdWords\v201609\cm\Selector;
use Google\AdsApi\AdWords\v201609\cm\SortOrder;
变为
use Google\AdsApi\AdWords\v201609\cm\{CampaignService, OrderBy, Paging, Selector, SortOrder};
您还可以执行以下某些操作,这些内容适用于旧版本的PHP。
use Google\AdsApi\AdWords;
$adWordsServices = new AdWords\AdWordsServices;
$campaignService = new AdWords\v201609\cm\CampaignService;
这会减少您需要导入的内容,但要求您填写实例化时未导入的名称空间的剩余部分。
http://php.net/manual/en/language.namespaces.importing.php#language.namespaces.importing.group
答案 1 :(得分:1)
看起来你的控制器中有很多逻辑。您可以创建更具体的类来执行某些逻辑。 Ex创建一个处理所有GoogleApi交互的类,然后在控制器中导入该类。
app/GoogleApi/AdWords.php
<?php
namespace App\GoogleApi;
use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSession;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\AdWords\v201609\cm\CampaignService;
use Google\AdsApi\AdWords\v201609\cm\OrderBy;
use Google\AdsApi\AdWords\v201609\cm\Paging;
use Google\AdsApi\AdWords\v201609\cm\Selector;
use Google\AdsApi\AdWords\v201609\cm\SortOrder;
use Google\AdsApi\Common\OAuth2TokenBuilder;
class AdWords
{
public function auth()
{
// auth logic
}
// other methods
}
然后在您的控制器中,您将只有
use App\GoogleApi\AdWords
。
如果您使用的是PHP 7已经有了一个很好的答案,如果没有,您可以这样做:
而不是:
use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSession;
...
只放
use Google\AdsApi\AdWords;
然后在您的代码中使用该命名空间类:
$service = new AdWords\AdWordsServices;
希望有所帮助。