2013-03-24 15 views
6

Il codice qui sotto dice tutto ...laravel 4: Passaggio di dati da fare per il fornitore di servizi

// 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

Ciao @schmaltz hai raggiunto una risposta per la tua domanda? Sto avendo lo stesso problema e sto cercando una soluzione in quanto la mia applicazione utilizza un'architettura simile alla tua .. – Omranic

risposta

3

È necessario passare la matrice di prova per la classe all'interno del fornitore di servizi

// 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

sì, ho notato che funzionava. Il mio valore non è statico e deve essere passato in qualche modo. Ad esempio: è disponibile in Route come input. –

+0

scusa, ho appena notato questo. Potrebbe essere una cosa del genere che hai bisogno di http://stackoverflow.com/questions/15483542/laravel-4-way-to-inject-an-object-that-requires-configuration-into-a-controller –

7

Si può cercare di impegnare la classe con i parametri direttamente nel contenitore dell'app, come

<?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); 
     }); 
    } 
} 

lasciando intatto il tuo SimpleGeo.php. Puoi testarlo nei tuoi percorsi.php

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

var_dump ($test); 
+0

If I do App :: bind come i I get App non è definito. Se lo tengo come il mio ma aggiungo il parametro 2 $ parametri ottengo Avvertimento: argomento mancante 2 –

+0

È strano, per me funziona normalmente. Ho messo il mio ** SimpleGeo.php ** e ** SimpleGeoSeriveProvider.php ** nella cartella __/libraries__ (e ho aggiunto il loader del percorso nel file composer.json e poi ho emesso un comando ** compositore dump-autoload **) e aggiunto ** 'SimpleGeoServiceProvider' ** all'array dei provider in __app/config/app.php__. A proposito, è l'errore generato in SimpleGeoServiceProvider.php o nel tuo route.php? –

+0

Bene, ho costruito il mio con il comando "workbench" in modo che risieda in workbench /. Viene generato l'errore in SimpleGeoServiceProvider. Ho intenzione di ricontrollare e tornare da te. –

Problemi correlati