У меня есть таблица групп в моей базе данных, и у каждой группы есть слизняк. У меня есть следующие маршруты, определенные последними в файле routes.php, так что, если никакой другой URL не сопоставляется, приложение проверяет, принадлежит ли slug группе и показывает страницу группы. На странице группы также есть форма, поэтому необходимо также обработать эту форму.Как вызвать действие контроллера в Laravel и выполнить запрос проверки
Route::get('{slug}', ['as' => 'dynamic_route', function($slug){
$group = \App\Group::where('slug', $slug)->first();
if(!is_null($group)) {
$app = app();
$controller = $app->make('App\Http\Controllers\GroupsController');
return $controller->callAction('view', ['slug' => $group->slug]);
} else {
abort(404);
}
}]);
Route::post('{slug}', ['as' => 'dynamic_route_submit', function($slug){
$group = \App\Group::where('slug', $slug)->first();
if(!is_null($group)) {
$app = app();
$controller = $app->make('App\Http\Controllers\GroupsController');
return $controller->callAction('handle_register', [$group->slug]);
} else {
abort(404);
}
}]);
Вот моя группа контроллер:
<?php namespace App\Http\Controllers;
use View;
use App\Group;
use App\Lifestyle_question;
use App\Http\Requests\User\RegisterStep1Request;
use App\Http\Requests\User\RegisterStep2Request;
use Breadcrumbs;
class GroupsController extends FrontendController {
public function __construct()
{
parent::__construct();
}
function view($slug)
{
$this->data['group'] = Group::where('slug', '=', $slug)->first();
$this->data['lifestyle_questions'] = Lifestyle_question::all();
Breadcrumbs::setCurrentRoute('dynamic_route', $this->data['group']);
return View::make('groups/view', $this->data);
}
function handle_register(RegisterStep1Request $request1, RegisterStep2Request $request2, $slug)
{
$this->data['group'] = Group::where('slug', '=', $slug)->first();
die("Validation passed");
}
}
Метод вида отлично работает, однако, когда я отправить форму, я получаю следующее сообщение об ошибке:
ErrorException in GroupsController.php line 27:
Argument 1 passed to App\Http\Controllers\GroupsController::handle_register() must be an instance of App\Http\Requests\User\RegisterStep1Request, string given
Я знаю, что это имеет отношение к делать с параметрами, передаваемыми методу контроллера из определения маршрута, и поэтому я попытался выполнить следующие действия, пытаясь его сортировать:
Route::post('{slug}', ['as' => 'dynamic_route_submit', function($slug){
$group = \App\Group::where('slug', $slug)->first();
if(!is_null($group)) {
$app = app();
$controller = $app->make('App\Http\Controllers\GroupsController');
return $controller->callAction('handle_register', [new \App\Http\Requests\User\RegisterStep1Request, new \App\Http\Requests\User\RegisterStep2Request, $group->slug]);
} else {
abort(404);
}
}]);
Это исправило проблему, за исключением того, что запросы просто не срабатывали. Как я могу вызвать этот метод и убедиться, что запросы запускаются так, что выполняется проверка?
Спасибо, я предполагаю, что, возможно, это сработает, поэтому мне, возможно, придется это сделать, если я не смогу найти другое решение, я предпочитаю сохранять свою проверку в запросах, хотя, если я могу, чтобы это загромождало контроллер, если я Можно. – geoffs3310