[英]Understanding Constructor, $this keyword, and controller class in PHP/Laravel
我知道這之前已經被分片討論過,但我正在努力解決如何將它應用到我的代碼中。
我正在 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' =>'ImageController@postUpload']);
所以我的第一個問題是,我從來沒有在我的路線中調用構造函數。 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,但它們的類聲明和對象實例很容易理解,但事實並非如此。 如果有人可以向我解釋代碼,那將非常有幫助。
謝謝!
我從來沒有在我的路線中調用構造函數。 postUpload() 是正確的。 這是否意味着它沒有目的?
創建控制器對象時會自動調用構造函數。
為什么構造函數在 ImageRepository 和 $imageRepository 之間沒有逗號...根據我對文檔的理解,如果其中一個是布爾值,您只會這樣做?
ImageRepository
不是另一個論點。 它是一個類型提示(或者在 PHP 7 中是一個類型聲明)
為什么 $response = $this->image->upload($photo); postUpload() 中有什么意思嗎? 該函數upload() 來自Repository,是否足夠使用以至於它知道該怎么做?
use
對於您的控制器能夠使用ImageRepository
是必要的。 一旦它在構造函數中加載到你的對象中, $this->image = $imageRepository;
,您的控制器方法可以通過$this->image
訪問其方法(例如upload
)。
為什么 $this->image 意味着什么,$this 指的是什么?
是的, $this確實指的是ImageController
類。 PHP 手冊指出:
The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object
$this->image 中的圖像是否來自受保護的 $image?
protected $image
設置控制器對象的$image
屬性的可見性。 它不會為財產分配任何東西; 這是在構造函數中完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.