Ich habe eine Gruppentabelle in meiner Datenbank und jede Gruppe hat einen Slug. Ich habe die folgenden Routen zuletzt in meiner routes.php-Datei definiert, so dass, wenn keine andere URL gefunden wird, die App überprüft, ob der Slug zu einer Gruppe gehört und stattdessen die Gruppenseite anzeigt. Es gibt auch ein Formular auf der Gruppenseite, so dass die Einreichung dieses Formulars ebenfalls behandelt werden muss.So rufen Sie die Controller-Aktion in Laravel auf und führen eine Validierungsanfrage aus
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);
}
}]);
Hier ist meine Gruppen-Controller:
<?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");
}
}
Die Ansicht Methode funktioniert jedoch gut, wenn ich die Form ich die folgende Fehlermeldung einreichen:
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
weiß ich, das muss mache ich mit den Parametern, die von der Routendefinition an die Controller-Methode übergeben werden, und versuchte daher folgendes, um sie zu sortieren:
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);
}
}]);
Dies behebt das Problem, außer die Anfragen wurden nicht ausgelöst. Wie kann ich diese Methode aufrufen und sicherstellen, dass die Anforderungen ausgelöst werden, damit die Validierung ausgeführt wird?
Danke, ich nehme an, dass wahrscheinlich funktionieren würde, also muss ich es vielleicht so machen, wenn ich keine andere Lösung finden kann. Ich bevorzuge es, meine Validierung in Anfragen zu halten, wenn ich eher den Controller überladen kann kann. – geoffs3310