2016-07-08 34 views
1

我知道這已經件被覆蓋過,但我與如何將其應用到我的代碼中掙扎。

我正在Laravel開發一個PHP應用程序,但希望讓我的代碼更加模塊化和可測試,這意味着將我的邏輯從我的超級控制器中分離出來,並將它們分離爲單獨的文件並從控制器中調用它們。

在這樣一個控制器(ImageController),我在在ImageRepository.php邏輯調用,它看起來像這樣:

<?php 
namespace App\Http\Controllers; 
use App\Logic\Image\ImageRepository; 
use Illuminate\Support\Facades\Input; 
class ImageController extends Controller 
{ 
    protected $image; 
    public function __construct(ImageRepository $imageRepository) 
    { 
     $this->image = $imageRepository; 
    } 
    public function getUpload() 
    { 
     return view('pages.upload'); 
    } 
    public function postUpload() 
    { 
     $photo = Input::all(); 
     $response = $this->image->upload($photo); 
     return $response; 
    } 
    /*public function deleteUpload() 
    { 
     $filename = Input::get('id'); 
     if(!$filename) 
     { 
      return 0; 
     } 
     $response = $this->image->delete($filename); 
     return $response; 
    } 
    */ 
} 

我的問題是我不明白這個代碼是如何工作的,因爲我得到了它來自另一個來源,並希望瞭解它,所以我可以在我的代碼中的其他地方複製此架構。

我的路線上載圖片時,是這樣的:

Route::post('upload_image', ['as' => 'upload-post', 'uses'  =>'[email protected]']); 

所以我的第一個問題是,我從來沒有調用構造函數在我的路線。它右轉到postUpload()。這是否意味着它沒有目的?此外,爲什麼構造函數在ImageRepository$imageRepository之間沒有逗號...從我對文檔的理解中,只有當它們中的一個是布爾值時才這樣做?

而且爲什麼$response = $this->image->upload($photo);意味着postUpload()什麼?那函數upload()來自Repository,是use足以讓它知道該怎麼做?爲什麼$this->image意味着什麼,$this是指什麼? ImageController類?是image$this->image派生自protected $image

我想我應該在使用Laravel框架之前堅持使用普通的PHP,因爲雖然我可以輕鬆導航到Laravel以創建一個工作應用程序,但似乎阻礙了我遵循最佳實踐/體系結構的能力。 AFAIK控制器主要是操縱數據並將其發送到視圖或數據庫的東西,我不明白爲什麼它是一個類?

很抱歉的多個問題,我只是很困惑。我在codeacademy上教了自己的php,但是他們的類聲明和對象實例很容易遵循,但事實並非如此。如果有人能夠向我解釋代碼,那將非常有幫助。

謝謝!

+0

'$ this'只能指代與使用'$ this'的代碼相同的對象/類。每個對象都是它自己的'$ this','$ this'永遠不會指向其他外來對象。就像網絡的「本地主機」 - 每臺機器都是自己的本地主機,本地主機無法指向其他地方。 –

回答

1

我從來沒有調用構造函數在我的路線。它正確的postUpload()。這是否意味着它沒有目的?

當創建控制器對象時,會自動調用constructor

爲什麼構造函數在ImageRepository和$ imageRepository之間沒有逗號......根據我對文檔的理解,只有當它們中的一個是布爾值時才這麼做?

ImageRepository是不是另一種說法。它是一種type hint(或在PHP 7,一種類型的聲明

爲什麼$響應= $這個 - >圖像 - >上傳($照片);意味着什麼在postUpload()?該函數upload()來自Repository,是否足夠使用,以便它知道該怎麼做?

use是您的控制器必須能夠使用ImageRepository。一旦它被加載到構造函數$this->image = $imageRepository;中的對象中,您的控制器方法就可以通過$this->image訪問其方法(如upload)。

爲什麼$ this-> image意味着什麼,$ this是指什麼?

是的,$this確實指的是ImageController類。該PHP manual狀態:

The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object


是從保護$圖像導出$這個 - 圖像>圖像?

protected $image設置控制器對象$image屬性的visibility。它不分配任何東西給財產;這是在構造函數中完成的。

+0

好吧,我的最後一個問題是'protected $ image'做了什麼?它從來沒有被賦值,所以爲什麼它在那裏?非常感謝! –

+0

哎呀,我錯過了那一個。我編輯了答案。 –