2015-11-11 36 views
0

我是Laravel的新手。 我沒有數據庫連接,但我試圖將控制器中的邏輯放置在模型中,以創建胖模型和纖細控制器。哪裏可以找到模型的常用功能?Laravel

當我這樣做時,我意識到我必須在不同的模型中使用常見的功能。我見過他們通常把這些類放在app\lib\,但我想這只是讓控制器訪問它們?我似乎無法從M模型訪問它們:

<?php 
//in app/lib/MyLog.php 
class MyLog{ 
    //whatever 
} 

然後在M模型:

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

我得到的錯誤:

PHP Fatal error: Class 'MyLog' not found in C:\inetpub\wwwroot\laravel\app\models\Overview.php on line 80

+0

我不知道Laravel 4,但在5,你必須添加一個「使用App \ Mylog;」聲明之前使用它。 – Amarnasan

+0

我通過Builder類擴展了laravel模型,因此它具有簡單的查詢方法,但由於需要自己的方法,所以最好由Builder創建自己的類擴展,並且該類要成爲模型類的父類。 OOP – Janko

回答

1

如果包括你的模型像這在你的控制器use App\MyLog;

然後你應該有MyLog.php文件裏面app\MyLog.php

更新:由於OP希望從任何型號

然後訪問一些常用功能Mutators應該幫助你做到這一點

這裏給出的類似的例子在那裏

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

我想要做的是從我的模型中使用相同的功能,而不是使用我的控制器。 – Alvaro

+0

你想從模型訪問控制器? –

+0

編號從任何型號訪問常用功能。例如'convertToDecimal($ demo)' – Alvaro

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。這將名稱空間和類映射到正確的文件。

+0

我想從我的模型中調用它們,而不是從我的控制器調用它們 – Alvaro

+0

因此,您想在模型中調用setter方法?你能否給一個用例說明你爲什麼要這樣做?這對我來說似乎是一種反模式。 –

+0

當我在處理模型中的邏輯時,我需要從我的模型中調用常用函數,例如'convertToDecimal($ demo)'或'callAPI($ params)'。現在,我只是將它們放在一個'BaseModel.php'中,我的所有模型都從這個'BaseModel.php'中擴展,但它看起來不是一個合適的解決方案。 – Alvaro

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' 

現在在你的/應用/型號/Overview.php你可以用更短的別名:

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