2016-07-08 4 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の間にカンマを持っていないのですか?私がドキュメントを理解してから、それらのうちの1つがブール値ならば、

また、$response = $this->image->upload($photo);の意味は、postUpload()の意味ですか?その機能upload()はリポジトリから来て、何をすべきかを知るのに十分なuseですか? $this->imageの意味は何ですか?$thisは何を指していますか? ImageControllerクラスですか? はprotected $imageから派生した$this->imageにありますか?

Laravelフレームワークに移行する前に、通常のPHPで動かなくてはいけないと思うので、Laravelを使って簡単にアプリケーションを作成できますが、ベストプラクティス/アーキテクチャに従うのが難しいようです。コントローラーは主にデータを操作してビューまたはデータベースに送信するものですが、なぜクラスであるのか分かりません。

複数の質問を申し訳ありません。私は非常に混乱しています。私はcodeacademyでphpを教えましたが、そのクラス宣言とオブジェクトインスタンスは非常に簡単です。これはそうではありません。誰かが私にコードを説明することができれば、それは非常に役に立ちます。

ありがとうございました!

+0

'$ this'は、' $ this'を使ったコードがメンバであるのと同じオブジェクト/クラスを参照することしかできません。すべてのオブジェクトはそれ自身の '$ this'であり、' $ this'は他の異物を指すことはできません。それはネットワーキングのための "localhost"のようなものです - すべてのマシンはそれ自身のローカルホストであり、localhostは他の場所を指すことはできません。 –

答えて

1

私のルートでは、決して関数を呼び出すことはありません。それはpostUpload()に向いています。それは意味がないのですか?

constructorは、コントローラオブジェクトの作成時に自動的に呼び出されます。

なぜImageRepositoryと$ imageRepositoryの間にコンマがないのですか?自分のドキュメントを理解してから、そのうちの1つがブール値であれば、その機能だけができますか?

ImageRepositoryは別の引数ではありません。それはなぜ$応答=の$ this - >イメージ - >は($写真)をアップロードん

type hint(またはPHP 7、タイプ宣言で)です。 postUpload()内の何かを意味しますか?その関数のupload()はリポジトリから来て、何をすべきかを知るために十分に使用されていますか?

コントローラがImageRepositoryを使用できるようにするには、useが必要です。 $this->image = $imageRepository;でコンストラクタのオブジェクトにロードされると、コントローラメソッドは$this->imageを介してそのメソッド(たとえば、upload)にアクセスできます。

なぜ$ 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


保護$の画像から得られる画像の$ this - 中>画像ですか?

protected $imageは、コントローラオブジェクトの$imageプロパティのvisibilityを設定します。プロパティに何も割り当てません。それはコンストラクタで行われます。

+0

私の最後の質問は、 'protected $ image'は何ですか?値が決して割り当てられないのはなぜですか?どうもありがとうございます! –

+0

おっと、私はそれを逃しました。私は答えを編集しました。 –

関連する問題