2015-12-08 13 views
6

私はコントローラから呼びたい新しいPHPクラスを持っています。 CakePHPのフォルダ構造のどこにこの新しいクラスを置くべきですか、それをコントローラから呼び出すか、またはそれを利用するための手順は何ですか?事前に協力いただきありがとうございます!CakePHP 3にカスタムPHPクラスを配置する場所は?

+1

コントローラーから使用したい場合、なぜコンポーネントを作成できませんか? – ADmad

+0

あなたのCakePHPアプリケーションやサードパーティのリソースのためにあなた自身で書いたものですか? – drmonkeyninja

+0

@drmonkeyninjaはサードパーティのクラスです。違いはありますか? – Jorge

答えて

12

私の視点から、あなたはユーティリティクラスとして任意の独自のクラスとも第三者のクラスを再利用することができます。その場合は、クラスをsrc/Utilityフォルダに配置することができます。適切な名前空間を使用してください。その後、そのクラスをCakPHP 3.xのどこでも使用できます。

は、配置する方法:

発言権を、ファイル名Jorge.phpを使用してsrc/Utilityフォルダに保存し、Jorgeという名前のクラスを持っています。 Jorge.phpファイルのnamespace App\Utility;文の冒頭に置きます。

使い方:あなたはこのクラスを使用したいファイルで

、ちょうどuse App\Utility\Jorge;を置きます。その後、クラスをそのファイルに呼び出すことができます。

ALTERNATIVEソリューション:

あなたは多くのクラスのサードパーティ製のパッケージを持っている場合は、あなたがhttps://stackoverflow.com/a/28527683/1787600

0

作成するほとんどのCakePHP派生コードは、ドキュメントで概説されている構造に該当します。 「完全に任意のユーティリティクラス」については

http://book.cakephp.org/3.0/en/intro/cakephp-folder-structure.html

私はあなたの意味を推測しているように、CakePHPは、「サードパーティの依存関係」(概念的には)として、それらを扱い、彼らは、「ベンダー」フォルダに置くことをお勧めします。新しいコンテンツがあなた自身のユーティリティプロジェクトである場合、そのフォルダ内のものを編集しないようにすることは推奨できません。

読み込みには、古い関数を使用してください。requireファミリーの関数。

http://book.cakephp.org/3.0/en/core-libraries/app.html

アプリケーションで作曲を使用していないために起こる場合は、手動ですべてのベンダーが自分でライブラリをロードする必要があります。

requireに必要なパスを構築するために、CakePHPグローバル定数/関数を利用することができます。

http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html

APPAPP_DIRWWW_ROOTなど

+4

"*読み込みには、古い古いphpの関数ファミリーが必要です。*" - CakePHPは名前空間とPSRオートローダーを使用しています。古代のコードを使用する場合を除いて、もう必要を使用する必要はほとんどありません。名前空間とパスが一致していることを確認するだけで、クラスが使用されると自動的にそのクラスを見つけることができます。 – burzum

+0

確かに、光沢のある現代的なファイルを作成すると仮定すると、彼はオートロードを使うことができます。しかし、彼が近代化されたユーティリティの完全なスタックを使用していない場合は、古い学校のサードパーティの図書館を引っ張るときのように、古い学校の「インクルード」を使う方が簡単かもしれません。もし彼がクラスの代わりに関数を書くのを確実にしているのであれば? OPの質問はクラスに焦点が当てられていましたが、より一般的なケースは、「私はファイルから、多分いくつかのデータ/画像/サウンド/ビデオをロードしたいと思うでしょう。 PSR autoload "と表示されます。 – starlocke

0

に従うことができますあなたはどこでもあなたが/のsrc /フォルダにしたい、それを置くことができます。カスタムクラスは、Interface、DTO、Utility、Customなどのフォルダで収集できます。 cakePHP 3.xはPSR-4オートローダーを使用するので、クラスは一度使用されるとインスタンス化されます。正しい名前空間を追加することを忘れないでください。 たとえば、カスタムインターフェイスaddファイルsrc/Custom/Ownedを使用する場合。PHP

<?php 
namespace App\Custom; 
interface Owned 
{ 
    /** 
    * Find username owning object by object primary id 
    * @param $id 
    * @return string|int 
    */ 
    public function owner($id) : string; 
} 
... 

は、その後すぐにそれを使用することができます:あなたはあなたのクラスを再利用しようとしている場合

... 
class UsersTable extends Table implements Owned 
{ 
... 

をより良い解決策は、それが保存されますので、作曲することにより、独自のpackagistパッケージを作成し、それを含めることであろう"/ vendor"

関連する問題