2016-07-22 13 views
0

Ich habe die folgenden FehlerFehler: Klasse Existiert nicht in Laravel

InvalidArgumentException in FormBuilder.php Linie 39: Form-Klasse mit dem Namen App\Http\Controllers\App\Forms\SongForm ist nicht vorhanden.

auf Laravel,

SongsController.php Klasse

<?php 

namespace App\Http\Controllers; 

use Illuminate\Routing\Controller as BaseController; 
use Kris\LaravelFormBuilder\FormBuilder; 

class SongsController extends BaseController { 

    public function create(FormBuilder $formBuilder) 
    { 
     $form = $formBuilder->create(App\Forms\SongForm::class, [ 
      'method' => 'POST', 
      'url' => route('song.store') 
     ]); 

     return view('song.create', compact('form')); 
    } 

    public function store(FormBuilder $formBuilder) 
    { 
     $form = $formBuilder->create(App\Forms\SongForm::class); 

     if (!$form->isValid()) { 
      return redirect()->back()->withErrors($form->getErrors())->withInput(); 
     } 

     // Do saving and other things... 
    } 
} 

SongForm.php

<?php 

namespace App\Forms; 

use Kris\LaravelFormBuilder\Form; 

class SongForm extends Form 
{ 
    public function buildForm() 
    { 
     $this 
      ->add('name', 'text', [ 
       'rules' => 'required|min:5' 
      ]) 
      ->add('lyrics', 'textarea', [ 
       'rules' => 'max:5000' 
      ]) 
      ->add('publish', 'checkbox'); 
    } 
} 

routes.php

Route::get('songs/create', [ 
    'uses' => '[email protected]', 
    'as' => 'song.create' 
]); 

Route::post('songs', [ 
    'uses' => '[email protected]', 
    'as' => 'song.store' 
]); 

Und ich weiß nicht, wo das Problem liegt, da die Datei im Projektordner vorhanden ist.

Antwort

2

Erklärung des Fehlers

hier:

$form = $formBuilder->create(App\Forms\SongForm::class, [ 
     'method' => 'POST', 
     'url' => route('song.store') 
    ]); 

Sie specifing die Klassennamen mit einem Namensraum in Bezug auf den aktuellen Namensraum:

App\Forms\SongForm::class 

die vollständigen Klassennamen wird relativ aus dem aktuellen Namespace erstellt:

namespace App\Http\Controllers; 

So wird die Klasse, die Sie vorbei sind als Parameter:

App\Http\Controllers\App\Forms\SongForm::class 

Diese Klasse existiert nicht, und Sie erhalten so den Fehler

Wie

lösen Zum Lösen können Sie den absoluten Namespace angeben. Ändern Sie dies:

App\Forms\SongForm::class 

dazu:

\App\Forms\SongForm::class 

und es sollte

+1

Dank arbeiten. es hat perfekt funktioniert. –

Verwandte Themen