在Laravel 4中使用名称空间

use*_*045 44 php namespaces laravel laravel-4

我是Laravel的新手并且通常使用PHP命名空间.在我决定制作名为File的模型之前,我没有遇到任何问题.我如何正确地进行命名空间,以便我可以使用我的File模型类?

文件是app/controllers/FilesController.php和app/models/File.php.我正在努力创造一个新File的FilesController.php.

Jos*_*way 89

一旦掌握了它,它就很容易命名.

请看以下示例:

应用程序/模型/ File.php

namespace App\Models;

class File {

    public function someMethodThatGetsFiles()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序/控制器/ FileController.php

namespace App\Controllers;

use App\Models\File;

class FileController {

    public function someMethod()
    {

        $file = new File();
    }
}
Run Code Online (Sandbox Code Playgroud)

声明命名空间:

namespace App\Controllers;
Run Code Online (Sandbox Code Playgroud)

请记住,一旦你在一个Namespace中放置一个类来访问PHP的任何内置类,你需要从Root Namespace中调用它们.例如:$stdClass = new stdClass();将成为$stdClass = new \stdClass();(见\)

"导入"其他命名空间:

use App\Models\File;
Run Code Online (Sandbox Code Playgroud)

这允许您使用File没有Namespace前缀的类.

或者你也可以打电话:

$file = new App\Models\File();
Run Code Online (Sandbox Code Playgroud)

但最好将它放在use语句的顶部,因为您可以在不必扫描代码的情况下查看所有文件的依赖项.

完成后,您需要运行它们composer dump-autoload来更新Composer的自动加载功能,以考虑新添加的类.

请记住,如果您想通过URL访问FileController,那么您需要定义一个路由并指定完整的命名空间,如下所示:

Route::get('file', 'App\\Controllers\\FileController@someMethod');
Run Code Online (Sandbox Code Playgroud)

这会将所有GET /文件请求指向控制器 someMethod()

看看关于命名空间的PHP文档,Nettut总是这篇文章的一个很好的资源

  • 我按照上面的步骤,但最后我得到错误:找不到类'App\Controllers\BaseController'.在制作\ BaseController后我得到错误:类FileController不存在.我也做composer dump-autoload (3认同)

Pie*_*ucz 5

首先,加载您的类:

$ composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

然后

$file = new File;

// your stuff like:
$file->name = 'thename';
$file->active = true;

$file->save();
Run Code Online (Sandbox Code Playgroud)

部分:插入,更新,删除Laravel 4 Eloquent的文档