2017-01-30 2 views
3

In jedem Controller in meiner Laravel Anwendung verwende ich alle diesen Namensraum:Vermeiden Sie wiederholte Code in Laravel Controller

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; 

ich einen Weg brauchen, um all diesen Code in meinem Controller zu wiederholen. Ich habe versucht, es in einen Basis-Controller zu legen und dann alle anderen Controller aus diesem zu erweitern, aber es hat nicht funktioniert.

Ich wäre dankbar für Anregungen.

Antwort

7

Wenn Sie PHP 7 verwenden, können Sie diese gruppieren.

Beispiel

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; 

Wird

use Google\AdsApi\AdWords\v201609\cm\{CampaignService, OrderBy, Paging, Selector, SortOrder}; 

Sie auch so etwas wie die folgenden Aktionen durchführen, die ältere Versionen von PHP arbeiten sollte.

use Google\AdsApi\AdWords; 

$adWordsServices = new AdWords\AdWordsServices; 
$campaignService = new AdWords\v201609\cm\CampaignService; 

Dies verkürzt sich auf, was Sie importieren müssen aber erfordert, dass Sie in den Rest des Namensraum füllen Sie importieren nicht, als instanziieren.

http://php.net/manual/en/language.namespaces.importing.php#language.namespaces.importing.group

+0

nur aus Neugier, was ist, wenn es nicht PHP 7 ist? – davejal

+0

Der zweite Teil meiner Antwort sollte dann funktionieren, wo Sie den Namespace und nicht die Klasse importieren. – user3158900

+0

Ich benutze PHP5.6 aber in der zwei-Wege muss ich den Code in allen meinen Controllern wiederholen, wenn nicht am Anfang, im Körper des Controllers. Thanks @ user3158900 –

1

Sieht aus wie Sie eine Menge Logik in Ihrem Controller haben. Sie könnten spezifischere Klassen erstellen, die bestimmte Logik ausführen. Erstellen Sie zum Beispiel eine Klasse, die alle GoogleApi-Interaktionen behandelt, und importieren Sie dann diese Klasse in Ihren Controller.

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 
} 

Dann in Ihrem Controller werden Sie nur use App\GoogleApi\AdWords haben.

Wenn Sie mit PHP-7 bereits eine gute Antwort haben, wenn Sie nicht so etwas tun kann:

Statt:

use Google\AdsApi\AdWords\AdWordsServices; 
use Google\AdsApi\AdWords\AdWordsSession; 
... 

setzen nur

use Google\AdsApi\AdWords; 

dann in Ihr Code zur Verwendung der Namespace-Klassen:

$service = new AdWords\AdWordsServices; 

Hoffe, dass hilft.

+0

Yeh ich eine AdWords-Website, die mir Diagramme aller meiner Kampagnen darin, um sie alle auf der gleichen Seite zu sehen. Also jeder Controller ist anders Google AdWords-Aufruf. aber ich mag deine Idee und ich möchte es versuchen. Danke –

+0

Überprüfen Sie meine aktualisierte Antwort, vielleicht hilft. – Mirceac21

+0

gleich der ersten Antwort. Vielen Dank –

Verwandte Themen