【问题标题】:Using namespaces in Laravel 4在 Laravel 4 中使用命名空间
【发布时间】:2013-01-20 19:28:53
【问题描述】:

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

文件是app/controllers/FilesController.phpapp/models/File.php。我正在尝试在FilesController.php 中创建一个新的File

【问题讨论】:

    标签: php namespaces laravel laravel-4


    【解决方案1】:

    一旦掌握了命名空间的窍门,命名空间就非常容易了。

    举个例子:

    app/models/File.php

    namespace App\Models;
    
    class File {
    
        public function someMethodThatGetsFiles()
        {
    
        }
    }
    

    app/controllers/FileController.php

    namespace App\Controllers;
    
    use App\Models\File;
    
    class FileController {
    
        public function someMethod()
        {
    
            $file = new File();
        }
    }
    

    声明命名空间:

    namespace App\Controllers;
    

    请记住,一旦您将一个类放入命名空间以访问任何 PHP 的内置类,您需要从根命名空间调用它们。例如:$stdClass = new stdClass(); 将变为 $stdClass = new \stdClass();(参见 \

    “导入”其他命名空间:

    use App\Models\File;
    

    这允许您随后使用不带命名空间前缀的File 类。

    您也可以直接调用:

    $file = new App\Models\File();
    

    但最好将其放在 use 语句的顶部,因为这样您就可以查看所有文件的依赖项,而无需扫描代码。

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

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

    Route::get('file', 'App\\Controllers\\FileController@someMethod');
    

    这会将所有 GET /file 请求定向到控制器的someMethod()

    查看Namespaces 上的 PHP 文档,Nettut 始终是 this 文章的好资源

    【讨论】:

    • @JoshHollowway 如果让 FileController 扩展 BaseController 这将失败并出现 BaseController not found 的错误,你如何解决这个问题?
    • 你需要从根命名空间引用 BaseController,使用 \ 像这样:\BaseController
    • 我按照上述程序进行操作,但最后我得到了错误:Class 'App\Controllers\BaseController' not found 。在制作 \BaseController 我得到错误: Class FileController does not exist 。我也做作曲家转储自动加载
    • @JoshHolloway 有没有使用扩展的例子?
    【解决方案2】:

    首先,加载你的类:

    $ composer dump-autoload
    

    然后

    $file = new File;
    
    // your stuff like:
    $file->name = 'thename';
    $file->active = true;
    
    $file->save();
    

    Section: Insert, Update, Delete on Laravel 4 Eloquent's doc

    【讨论】:

      【解决方案3】:

      要命名你的模型,在你的模型类的顶部打开之后

      然后,当您从控制器调用时,您将调用 new What\Model;

      您可能必须在第一次使用 composer 进行转储自动加载。

      【讨论】:

        【解决方案4】:

        看看它..希望能清除您的查询....

        <?php
        
         namespace app\controllers;
         use yii\web\Controller;
         use app\models\users;
          class UserController extends Controller{
         public function actionIndex()
         {
        echo "working on .....";
        }
        }
        

        【讨论】:

          【解决方案5】:

          命名空间定义在 PHP 类的顶部,紧跟在打开的 php 脚本标记之后,如下所示:

           <?php
             namespace MyNameSpace;
          

          当你想在其他类中使用命名空间类时,你可以这样定义它:

          new MyNameSpace\PhpClass;
          

          或将其导入文件顶部(如果存在命名空间),如下所示:

           <?php
          
             //namespace
          
             use MyNameSpace\MyPHPClass;
          
             //then later on the code you can instantiate the class normally
             $myphpclass = new MyPHPClass();
          

          在 Laravel 中,可以在 composer 可以自动加载它们的任何地方定义命名空间,我建议在 app 目录中定义命名空间。因此,您可以通过在 app 目录中创建一个 Utils 目录、创建我们的实用程序类并像上面那样定义命名空间来定义一个类似 Utils 的命名空间来保存实用程序类。

          之后你运行命令让 composer 自动加载类:

           $ composer dump-autoload
          

          【讨论】:

            猜你喜欢
            • 2014-03-26
            • 2014-11-12
            • 2015-08-12
            • 2014-02-07
            • 2013-06-16
            • 2015-07-05
            • 2014-11-24
            • 1970-01-01
            • 2013-10-26
            相关资源
            最近更新 更多