Есть ли способ в Laravel 5, чтобы вызвать маршруты внутри/программно из приложения? Я нашел много уроков для Laravel 4, но я не могу найти информацию для версии 5.Laravel 5: Внутренние вызовы маршрутов
ответ
Фактически вы можете вызвать контроллер, который связывается с этим маршрутом, вместо того, чтобы «вызывать» маршрут внутри.
Например:
routes.php
Route::get('/getUser', '[email protected]');
UserController.php
class UserController extends Controller {
public function getUser($id){
return \App\User::find($id);
};
}
Вместо вызова /getUser
маршрут, вы можете позвонить [email protected]
вместо этого.
$ctrl = new \App\Http\Controllers\UserController();
$ctrl->getUser(1);
Это то же самое, как calling
маршрут внутри страны, если это то, что вы имеете в виду. Надежда, что помогает
Вы можете попробовать что-то вроде этого:
// GET Request
$request = Request::create('/some/url/1', 'GET');
$response = Route::dispatch($request);
// POST Request
$request = Request::create('/some/url/1', 'POST', Request::all());
$response = Route::dispatch($request);
Ни один из этих ответов не работает для меня: они либо не принимает параметры запроса, или не может использовать экземпляр существующего приложения() (необходимый для config & .env vars).
Я хочу называть маршруты внутренне, потому что я пишу консольные команды для интерфейса с API моего приложения.
Вот что я сделал, что хорошо работает для меня:
<?php // We're using Laravel 5.3 here.
namespace App\Console;
use App\MyModel;
use App\MyOtherModel;
use App\Http\Controllers\MyController;
use Illuminate\Console\Command;
class MyCommand extends Command
{
protected $signature = 'mycommand
{variable1} : First variable
{variable2} : Another variable';
public function handle()
{
// Set any required headers. I'm spoofing an AJAX request:
request()->headers->set('X-Requested-With', 'XMLHttpRequest');
// Set your query data for the route:
request()->merge([
'variable1' => $this->argument('variable1'),
'variable2' => $this->argument('variable2'),
]);
// Instantiate your controller and its dependencies:
$response = (new MyController)->put(new MyModel, new MyOtherModel);
// Do whatever you want with the response:
var_dump($response->getStatusCode()); // 200, 404, etc.
var_dump($response->getContent()); // Entire response body
// See what other fun stuff you can do!:
var_dump(get_class_methods($response));
}
}
Ваш контроллер/Маршрут будет работать точно так, как если бы вы назвали его помощью curl
. Повеселись!
Использование Laravel 5.5, этот метод работает для меня:
$req = Request::create('/my/url', 'POST', $params);
$res = app()->handle($req);
$responseBody = $res->getContent();
// or if you want the response to be json format
// $responseBody = json_decode($res->getContent(), true);
Источник: https://laracasts.com/discuss/channels/laravel/route-dispatch
* Примечание: может быть, вы будете иметь проблемы, если маршрут вы пытаетесь получить доступ к имеет и вы не предоставляете правильные учетные данные. , чтобы избежать этого, обязательно установите правильные заголовки, чтобы запрос обрабатывался нормально (например, Authorisation bearer ...
).
- 1. Laravel 5 - типы маршрутов
- 2. laravel 5: Ошибка аутентификации маршрутов
- 3. Laravel 5 маршрутов и mod_rewrite
- 4. Laravel 5 маршрутизации всех маршрутов
- 5. Laravel 5 маршрутов не работает
- 6. Laravel 5 маршрутов не найдено
- 7. Ошибка при определении маршрутов в Laravel 5
- 8. Laravel 5 маршрутов называют контроллер непосредственно
- 9. Laravel 5: Middleware до и после маршрутов
- 10. Namespaced маршрутов не работают в Laravel 5
- 11. Laravel 5 новых маршрутов не работают
- 12. Laravel 5: проблема с определением маршрутов
- 13. Laravel 5: как получить маршруты всех маршрутов?
- 14. защита административных и пользовательских маршрутов laravel 5
- 15. Laravel 5 маршрутов настраиваемых модулей не работает
- 16. Laravel 5 Аутентификация: изменение маршрутов по умолчанию
- 17. Laravel 5: Обработка динамических и статических маршрутов
- 18. Затворы обратные вызовы в PHP (Laravel 5)
- 19. Дублирующих маршрутов Laravel
- 20. Classy Dojo - Внутренние вызовы методов
- 21. Внутренние вызовы makefile для таргетинга
- 22. Маршрутов в MVC 5
- 23. Msvc Внутренние вызовы внутренней линии сборки
- 24. Как получить список маршрутов по определенным группам в laravel 5?
- 25. Как показать одну страницу для всех маршрутов в Laravel 5?
- 26. Laravel 5 Защита маршрутов с помощью промежуточного программного обеспечения
- 27. Как получить список маршрутов из модуля/каталога в Laravel 5?
- 28. Laravel 5 пользовательских маршрутов с именем в контроллерах ресурсов
- 29. Можно ли переписать маршруты в Laravel 5, в файле маршрутов
- 30. Route ресурсов в группе маршрутов с префиксом в Laravel 5
Вы спрашиваете, как вы можете использовать свои собственные маршруты в своем приложении? И.Е. внутри контроллера получить результат маршрута? Являются ли эти конечные точки JSON? – Ohgodwhy
Вам не обязательно. Вы можете создать экземпляр своего контроллера и вызвать метод – geckob
@ Geckob отправил правильный ответ. Из любопытства, зачем вам это нужно? – jfadich