我知道以前已经对此进行过介绍,但我正在努力解决如何将其应用到我的代码中。
我正在 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
and $imageRepository
...根据我对文档的理解,只有当其中一个是布尔值时,你才会这样做?
还有为什么$response = $this->image->upload($photo);
意味着任何东西postUpload()
?那个功能upload()
来自存储库,是use
足够让它知道要做什么吗?为什么$this->image
意味着什么,什么是$this
参考?这ImageController
班级?是个image
in $this->image
源自protected $image
?
我想在转向 Laravel 框架之前我应该坚持使用常规 PHP,因为虽然我可以轻松地浏览 Laravel 来创建一个可用的应用程序,但它似乎阻碍了我遵循最佳实践/架构的能力。 AFAIK 控制器主要是操作数据并将其发送到视图或数据库的东西,我不明白为什么它是一个类?
抱歉提出了多个问题,我只是很困惑。我在 codeacademy 上自学了 php,但是他们的类声明和对象实例非常容易理解,但事实并非如此。如果有人可以向我解释代码,那将非常有帮助。
谢谢你!