(Laravel) Как использовать 2 контроллера в 1 маршруте?

Как я могу использовать 2 контроллера в 1 маршруте?

Цель здесь состоит в том, чтобы создать несколько страниц с 1 карьерой (например, бухгалтеров), а затем связать их со школой, предлагающей курс по бухгалтерскому учету.

Пример страницы будет состоять из:
1. Информация о карьере бухгалтера (я использую «карьерный» контроллер здесь)
2. Школы, предоставляющие курсы бухгалтерского учета (здесь я использую отдельный контроллер «школ»).

Route::get('/accountants-career', 'CareerController@accountants');
Route::get('/accountants-career', 'SchoolsController@kaplan');

Использование кода выше перезапишет 1 из контроллеров.

Есть ли решение, чтобы решить эту проблему?

3

Решение

Вы не можете сделать это, потому что это не очень хорошая вещь, и из-за этого Laravel не позволяет вам использовать один и тот же маршрут для выполнения двух разных действий контроллеров, если вы не используете разные методы HTTP (POST, GET …). Контроллер — это обработчик HTTP-запроса, а не класс обслуживания, поэтому вам, вероятно, придется немного изменить свой дизайн, это один из способов сделать это:

Если вы покажете все данные на одной странице, создайте один маршрутизатор:

Route::get('/career', 'CareerController@index');

Создайте тощий контроллер, только чтобы получить информацию и перейти к вашему виду:

use View;

class CareerController extends Controller {

private $repository;

public function __construct(DataRepository $repository)
{
$this->repository = $repository;
}

public function index(DataRepository $repository)
{
return View::make('career.index')->with('data', $this-repository->getData());
}

}

И создайте класс DataRepository, отвечающий за знание того, что делать в случае необходимости, такого рода данные:

class DataRepository {

public getData()
{
$data = array();

$data['accountant'] = Accountant::all();

$data['schools'] = School::all();

return $data;
}

}

Обратите внимание, что этот репозиторий автоматически внедряется в ваш контроллер, Laravel сделает это за вас.

5

Другие решения

Есть ли конкретная причина, по которой вам нужно использовать одно и то же имя маршрута?
В настоящее время вы не можете отличить маршруты от laravel, когда он их обрабатывает.

почему не что-то такое как;

Route::get('/accountants/career', 'CareerController@accountants');
Route::get('/accountants/schools', 'SchoolsController@kaplan');

Вы также можете сделать что-то подобное, если у вас есть несколько карьер, идущих к одному контроллеру и методам, основанным на их ценности.
Это позволяет вам иметь отдельный вызов, который вы можете вызывать для каждого из ваших утвержденных значений, вместо того, чтобы устанавливать отдельный маршрут и метод контроллера для каждого из них.

Route::get('/{careerName}/career', 'CareerController@all');
Route::get('/{careerName}/schools', 'SchoolsController@kaplan');
0

По вопросам рекламы [email protected]