我知道這已經件被覆蓋過,但我與如何將其應用到我的代碼中掙扎。
我正在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,但是他們的類聲明和對象實例很容易遵循,但事實並非如此。如果有人能夠向我解釋代碼,那將非常有幫助。
謝謝!
'$ this'只能指代與使用'$ this'的代碼相同的對象/類。每個對象都是它自己的'$ this','$ this'永遠不會指向其他外來對象。就像網絡的「本地主機」 - 每臺機器都是自己的本地主機,本地主機無法指向其他地方。 –