2013-03-24 5 views
6

Der Code unten sagt alles ...Laravel 4: Übergeben von Daten von make an den Dienstanbieter

// routes.php 
App::make('SimpleGeo',array('test')); <- passing array('test') 

// SimpleGeoServiceProvider.php 
public function register() 
{ 
    $this->app['SimpleGeo'] = $this->app->share(function($app) 
    { 
     return new SimpleGeo($what_goes_here); 
    }); 
} 

// SimpleGeo.php 
class SimpleGeo 
{ 
    protected $_test; 

    public function __construct($test) <- need array('test') 
    { 
     $this->_test = $test; 
    } 
    public function getTest() 
    { 
     return $this->_test; 
    } 
} 
+1

Hallo @schmaltz haben Sie eine Antwort auf Ihre Frage erreicht? Ich habe das gleiche Problem und suche nach einer Lösung, da meine Anwendung ähnliche Architektur wie Ihre verwendet. – Omranic

Antwort

3

Sie benötigen eine Testanordnung zur Klasse passieren innerhalb des Dienstleisters

// NOT in routes.php but when u need it like the controller 
App::make('SimpleGeo'); // <- and don't pass array('test') 

public function register() 
{ 
    $this->app['SimpleGeo'] = $this->app->share(function($app) 
    { 
     return new SimpleGeo(array('test')); 
    }); 
} 

YourController.php

Public Class YourController 
{ 
    public function __construct() 
    { 
     $this->simpleGeo = App::make('SimpleGeo'); 
    } 
} 
+0

yeah, ich bemerkte, dass es funktioniert hat. Mein Wert ist jedoch nicht statisch und muss irgendwie weitergegeben werden. Zum Beispiel: Es ist in Route als Eingabe verfügbar. –

+0

Entschuldigung, habe dies gerade bemerkt. Könnte etwas so sein, dass Sie brauchen http://stackoverflow.com/questions/15483542/laravel-4-way-to-inject-an-object-that-requires-configuration-into-a-controller –

7

Sie können versuchen, die Klasse zu binden, mit die Parameter direkt in Ihre App-Container, wie

<?php // This is your SimpleGeoServiceProvider.php 

use Illuminate\Support\ServiceProvider; 

Class SimpleGeoServiceProvider extends ServiceProvider { 

    public function register() 
    { 
     $this->app->bind('SimpleGeo', function($app, $parameters) 
     { 
      return new SimpleGeo($parameters); 
     }); 
    } 
} 

verlassen Ihre SimpleGeo.php unberührt. Sie können es in Ihrem routes.php testen

$test = App::make('SimpleGeo', array('test')); 

var_dump ($test); 
+0

Wenn ich App :: bind wie deine Ich bekomme App ist nicht definiert. Wenn ich es wie meins halte, aber den 2. Parameter $ parameter hinzufüge, bekomme ich Warnung: Fehlendes Argument 2 –

+0

Es ist komisch, denn ich arbeite normal. Ich habe meine ** SimpleGeo.php ** und ** SimpleGeoSeriveProvider.php ** in den Ordner __/libraries__ gestellt (und den Pfadlader in der Datei composer.json hinzugefügt und dann einen ** composer dump-autoload ** Befehl ausgegeben) und fügte '** SimpleGeoServiceProvider' ** dem Provider-Array in __app/config/app.php__ hinzu. Btw, ist der Fehler in SimpleGeoServiceProvider.php oder in Ihrer routes.php? –

+0

Nun, ich habe meins mit dem "workbench" -Befehl erstellt, so dass es in workbench/residiert. Es wirft den Fehler in SimpleGeoServiceProvider. Ich werde noch einmal nachsehen und zu dir zurückkommen. –

Verwandte Themen