2016-09-09 3 views
1

PHP開発用にYii2フレームワークを使用しています。 www.example.com/SiteController[class名] /インデックス[関数名]localhostからクラス/ファンクション形式で関数を呼び出す方法

そして、それは次のとおりです。私は、任意の関数を呼び出したい場合は、私のビューファイルでは、私はちょうど

例えばClass/Function名前を使用します関数を呼び出します。 私は純粋なPHPスクリプトで同じことをする方法を知りたいですか? 私は多くの場所で検索し、special_autoload_register();の提案を得ることができました。しかし、私は正確な実用的なアプリケーションを理解することができませんでした。 ガイダンスが期待され、ありがとうございます。

+0

PHPでクラスメソッドを呼び出す方法について質問していますか?重複のように聞こえます:http://stackoverflow.com/questions/15499513/php-call-class-method-function –

+1

MyControllerクラスのPathActionメソッドとして/ my/pathを扱うデフォルトのフレームワークルーターについて話していますか?そして、あなたはプレーンなPHPでこれを行う方法を知りたいですか? –

+0

@マグヌス、それは私が求めている質問ではありません。それはワックスが言ったようなものです。 – Pravin

答えて

1

これを行うには、Yii 2(および他のPHPフレームワーク)にルータがあります。 Yii 2のルータはUrlManagerクラスです。

展開したいソリューションのためにルータを最初から作成することはお勧めしません。 PHPには、あなたのソリューションで簡単に使えるルーティングパッケージがあります。私はKleinが好きです。これはPHPの純粋なルータです。

しかし、学術目的のために、PHPでルーティングがどのように機能するかを知りたい場合は、$_SERVER予約変数を理解してください。これは、あなたのスクリプトに来るHTTPリクエストのすべての詳細を持っています。これから詳細を使用して、呼び出す特定の機能を呼び出すことができます。

2

簡単です:)

これはすべてapache module mod_rewriteに基づいています。このモジュールでは、.htaccessファイルのパス動作を変更できます。あなたは次の動作を取得します。この.htaccessファイル

RewriteEngine On 

# The following rule tells Apache that if the requested filename 
# exists, simply serve it. 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 

# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do 
# mass virtual hosting, the base path will be prepended to 
# allow proper resolution of the index.php file; it will work 
# in non-aliased environments as well, providing a safe, one-size 
# fits all solution. 
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::$ 
RewriteRule ^(.*)$ - [E=BASE:%1] 
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L] 

を使用して

:要求されたファイルが存在する場合

  1. を(/styles/style.css - スタイル、JavaScriptの、イメージなど)は、それを提供します(現在の動作で何も変更しないでください)
  2. 要求されたファイルが存在しない場合は、index.phpにアクセスしてください。

あなたがindex.phpにリダイレクトされる場合は、$ _SERVER [ 'REDIRECT_URL']または$ _SERVER [ 'REQUEST_URI']にフル要求されたURLを見つけることができます。あなたがそれを受け取り、要求されたURIに基づいて解析し、行動することができます。

これを説明記事として、これをどうやって取得するかについてのガイドではありません。ほとんどの場合、mod_rewriteはデフォルトでほとんど無効になっているため、いくつかのApache設定が必要です。

状況を改善したい場合は、this postをお勧めします。

は完全にあなたの質問に答えるために、あなたはたとえば、「/」記号でリクエストURIを爆発$ FIRSTPARTに第二$ SECONDPARTに最初の部分を保存して、あなたが/助けを呼ぶのであれば

$controllerName = $firstPart."Controller"; 
$controller = new $controllerName; 
$actionName = $secondPart."Action" 
$response = $controller->$actionName(); 

を持つことができます/ me、helpController-> meAction()が呼び出されます。

私は助けて欲しいと思っています:)

関連する問題