comandos - Llamar a un controlador en Laravel 4
comandos artisan laravel (7)
Al igual que Neto, dijo que puedes usar:
App::make(''HomeController'')->getIndex($params);
Pero para enviar, por ejemplo, un POST con datos adicionales, podría utilizar el método "merge" antes de:
$input = array(''extra_field1'' => ''value1'', ''extra_field2'' => ''value2'');
Input::merge($input);
return App:make(''HomeController'')->someMethodInController();
¡Esto funciona para mi!
adiós
En Laravel 3, puede llamar a un controlador usando el método de llamada Controller ::, así:
Controller::call(''api.items@index'', $params);
Miré a través de la clase Controller en L4 y encontré este método que parece reemplazar el método anterior: callAction (). Aunque no es un método estático y no pude hacerlo funcionar. Probablemente no es la forma correcta de hacerlo?
¿Cómo puedo hacer esto en Laravel 4?
Es una vieja pregunta. Pero tal vez es útil. Hay otra manera.
En su controlador: puede declarar la función como pública estática
public static function functioNAME(params)
{
....
}
Y luego en el archivo de Rutas o en la Vista:
ControllerClassName::functionNAME(params);
Esta no es la mejor manera, pero puedes crear una función para hacer eso:
function call($controller, $action, $parameters = array())
{
$app = app();
$controller = $app->make($controller);
return $controller->callAction($app, $app[''router''], $action, $parameters);
}
Route::get(''/test'', function($var = null) use ($params)
{
return call(''TestController'', ''index'', array($params));
});
Hola chicos, pueden usar IoC ...
prueba esto
App::make($controller)->{$action}();
Ejemplo: App :: make (''HomeController'') -> getIndex ();
y también puedes dar params
App::make(''HomeController'')->getIndex($params);
La solución de Laurent funciona (aunque necesita un /
y los $params
que pasa a Request::create
son los parámetros GET, y no los manejados por Laravel (tengo que ponerlos después de api/items/
en el ejemplo).
No puedo creer que no haya una manera más fácil de hacer esto (aunque no es difícil, pero me parece un poco hackish). Básicamente, Laravel 4 no proporciona una forma fácil de asignar una ruta a un controlador utilizando una función de devolución de llamada? ¿Seriamente? Esta es la cosa más común en el mundo ...
Tenía que hacer esto en uno de mis proyectos:
Route::controller(''players'', ''PlayerController'');
Route::get(''player/{id}{rest?}'', function($id)
{
$request = Request::create(''/players/view/'' . $id, ''GET'');
return Route::dispatch($request)->getContent();
})
->where(''id'', ''/d+'');
Espero que me esté perdiendo algo obvio.
Si entiendo bien, estás tratando de construir una aplicación centrada en API y quieres acceder a la API internamente en tu aplicación web para evitar hacer una solicitud HTTP adicional (por ejemplo, con cURL). ¿Es eso correcto?
Usted podría hacer lo siguiente:
$request = Request::create(''api/items'', ''GET'', $params);
return Route::dispatch($request)->getContent();
Tenga en cuenta que, en lugar de especificar el destino del método controller @, necesitará usar la ruta uri que normalmente usaría para acceder a la API externamente.
Aún mejor, ahora puede especificar el verbo HTTP al que la solicitud debe responder.
$request = Request::create(''common_slider'', ''GET'', $parameters);
return Controller::getRouter()->dispatch($request)->getContent();
Para laravel 5.1