2016-07-08 36 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

哎呀,我错过了那一个。我编辑了答案。 –