2016-07-22 62 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

感谢。它工作完美。 –