2017-04-19 6 views
0

私は前に書いたオートローディングシステムを変更しようとしています。 私はコンポーザーを使用していますが、現時点では、クラスマップを持つライブラリを1つだけオートロードしています。作者autoloadクラスマップとpsr-4

"autoload": { 
"classmap": ["libs/"] 
} 

私は、ファイルの残りのPSR-4ローダーを追加すると名前空間なしと種類のlaravelで別名のように「それらを「使用」することなく、LIBS下のファイルを呼び出すことができるようにしたいです。これは私がやろうとしているものです:

"autoload": { 
"classmap": ["libs/"], 
"psr-4": { 
    "App\\": "" 
} 
} 

だから、最終的には「LIBS」に私は私のようにそれを呼んでいる、セッションクラスがある場合:

Session::get('anything') 

が、今追加しようとした後にpsr-4を名前空間のクラス内から呼び出す

namespace App\models; 

Class User{ 
function get(){ 
    return Session::get('anything'); 
} 
} 

ユーザーの名前空間内でセッションを検索するため、これはもう機能しません。 エイリアスを使ってすぐに実装できるフレームワークがたくさんあることはわかっていますが、このプロジェクトはちょっと古いものですから、少し整理してどこでも必要なものすべてを取り除こうとしています。モデルが必要です。

+0

'\ Session :: get( 'anything');'今のように使う –

答えて

0

私は、ファイルの残りのPSR-4ローダーを追加すると名前空間なしと種類のlaravelで別名のように「それらを「使用」することなく、LIBS下のファイルを呼び出すことができるようにしたいです。

あなたはuseを追加したり、バックスラッシュ\で始まる完全修飾名前空間のパスを追加することのどちらかずにクラスを使用することはできません。これは、これらのクラスをロードする方法とは関係ありませんが、PHP自体の基本的な必要条件です。オートローディングをどのように設計するかに関係なく、その周りには方法がありません。

としては、バックスラッシュが機能追加、コメントしたが、これは最低限必要ですした

namespace App\models; 
Class User{ 
    function get(){ 
    return \Session::get('anything'); 
    } 
} 
+0

OK、私はそれがあまりにも多くの変更のために起こらないことがわかります..、どのようにlaravelはそれを行うのですか?つまり、クラスマップと同じように、呼び出すことができるエイリアスの配列を定義しているということです。 –

+0

Laravelのドキュメントで、必要なことを説明することができれば、あなたの仕事を理解することができます。しかし、LaravelでもPHPの構文規則に違反することはできないので、あなたが望むことをすることができるとは思えません。 Laravelの機能を誤解している可能性が高いと思いますが、現時点では判断できません。 – Sven

0

私は私が好きなclasssesをエイリアシングするので、私はそれらを呼び出すことができることを別のクラスを書いて終わってきました箱から出してください。

あなたはここでそれを見ることができます:

https://github.com/shahafan/SAmvc-App/blob/master/Config/Aliases.php

私はそれらを使用する前に必要なすべてのクラスをロードすることができますので、基本的に私はPHPのclass_alias機能を使用しています。 私はlaravelが同じようにそれをすると思います。

関連する問題