在Laravel中为模型放置常用函数的位置

时间:2015-11-11 11:27:45

标签: laravel laravel-4

我对Laravel很新。 我没有数据库连接,但我试图将控制器中的逻辑分开放置在模型中,以便创建胖模型和超薄控制器。

在做这件事时,我意识到我必须在不同的模型中使用常用功能。我已经看到他们通常将这些类放在<?php //in app/lib/MyLog.php class MyLog{ //whatever } 中,但我想这只是控制器才能访问它们?我似乎无法从m模型访问它们:

//in a model
MyLog::setLogApi($url);

然后在m模型中:

{{1}}

我得到的错误:

  

PHP致命错误:在第80行的C:\ inetpub \ wwwroot \ laravel \ app \ models \ Overview.php中找不到类'MyLog'

3 个答案:

答案 0 :(得分:1)

如果您在控制器use App\MyLog;

中包含此类型号

然后你应该在MyLog.php

中有app\MyLog.php个文件

更新:由于OP希望从任何模型中访问某些常用功能

然后Mutators应该帮助你做到这一点

这是在那里给出的类似例子

public function convertToLower($value)
    {
        $this->attributes['yourLowerString'] = strtolower($value);
    }

答案 1 :(得分:0)

确保您的模型具有命名空间。如果您的MyLog类具有名称空间,例如:

<?php namespace App\Logging;

class MyLog {

}

然后你可以在你的控制器中调用它,如下所示:

<?php namespace App\Controllers;
use App\Logging\MyLog as MyLog;

class MyController {
  protected $logger;
  public function __construct() {
    $this->logger = new MyLog;
  }
}

您可能必须执行composer dump-autoload。这会将名称空间和类映射到正确的文件。

答案 2 :(得分:0)

您应该使用名称空间,这是现代PHP的好习惯。

文件app / lib / MyLog.php

namespace App\Lib;
class MyLog {
   // class functions
}

文件/app/models/Overview.php

namespace App\Models;
use App\Lib\MyLog;
class Overview {
    // class functions
}

您可以对完全命名空间的类使用短别名。别名存储在/app/config/app.php中,查找部分

"aliases" => array( 
     'App'               => 'Illuminate\Support\Facades\App',
     .
     .
     . );

在数组末尾添加MyLog类的新别名:

'MyLog' => 'App\Lib\MyLog'

现在在你的/app/models/Overview.php中你可以使用更短的别名:

namespace App\Models;
use MyLog;
class Overview {
    // class functions
}