2016-07-22 203 views
0

我有在FormBuilder.php線39以下錯誤錯誤:類不存在Laravel

InvalidArgumentException: 與名App\Http\Controllers\App\Forms\SongForm Form類不存在。

上Laravel

SongsController.php類

<?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' 
]); 

而且我不知道問題出在哪裏,因爲文件存在於項目文件夾中。

回答

2

錯誤的解釋

這裏:

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

你相對於目前的命名空間的命名空間specifing類名稱:

App\Forms\SongForm::class 

類的全名將從目前的命名空間相對建造,即:

namespace App\Http\Controllers; 

所以,你傳遞作爲參數的類變爲:

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

那類不存在,所以你的錯誤

如何解決

要解決,你可以指定絕對名稱空間。更改此:

App\Forms\SongForm::class 

這樣:

\App\Forms\SongForm::class 

,它應該工作

+1

感謝。它工作完美。 –

相關問題