2012-08-12 5 views
5

私はこのテーマに関するいくつかの他のトピックがあることを知っていますが、それらは私のニーズに合っていないようです。CakePHPコントローラエイリアス

CakePHPはあなたがコントローラを持って望んでいるので、私は LogsController代わりの LogController(複数)を持っている私は

  • example.com/log/
  • LogsController.php

持っ

複数。

ご存じのとおり、example.com/log/は、URLに「s」がないため、LogsControllerを使用しません。

/log/*/logs/*にリダイレクトします。私は動作するようには思えないexample.com/log/actions/foo/barアクセスしようとすると、

Router::connect ('/log/*', array('controller'=>'logs')); 

しかし、次のコードと完全に正常に動作します。だから、いくつかのグージョーリングの後、私はこれを見つけた:

Router::connect ('/log/:action/*', array('controller'=>'logs')); 

素晴らしいです。私は再びexample.com/log/にアクセスしようとしているとき、それは

Error: LogController could not be found.

が質問 言うしかし、今の私の質問は/log/が使用するように私は私のURLのエイリアスを設定するのですか、ですLogControllerを使用する代わりにLogsControllerを使用してください。

私は、flight => FlightsController,profile => ProfilesControllerのように、これを変更したいコントローラーをいくつか追加しています。


this questionをご覧ください。それはほぼ同じテーマですが、少し異なります。それは何らかの形であなたを助けるかもしれません。

+0

この記事を読むhttp://stackoverflow.com/questions/9959152/define-a-singular-rule-in-the-bootstrap-for-inflector – cgTag

+0

「フライト」は単数形と複数形の両方であることをケーキに伝える方が簡単です。 – cgTag

答えて

10

[OK]を、IRCの他の人々の助けを借りて、そのようなものです。私は以下を見つけました。

Router::connect('/flight/:action/*', array('controller'=>'flights')); 
Router::connect('/flight/*', array('controller'=>'flights')); 

の組み合わせは、トリックを行います。私は前にこれを試しましたが、次のように他の順序で試しました。

Router::connect('/flight/*', array('controller'=>'flights')); 
Router::connect('/flight/:action/*', array('controller'=>'flights')); 

これは動作しません。

この記事の最初の2行のコードは私のために解決しました。もう1人の男がArun Jainのソリューションは適切な解決策ではないと言いました。なぜなら、Arun Jainはコアのネーミングを変更するからです。 FormsHelperやそのようなクラスに問題が発生します。だから私はこのポストでコードを好きになると思います。なぜなら、このコードはコアの変化するスクリプトの代わりにエイリアスだからです。とにかく助けてくれてありがとう。

-1

あなたはそれが次を使用して簡単に操作を行うことができます。

class LogsController extends AppController 
{ 
public $name = 'Log'; 
..... YOUR REMAINING CODE ...... 
} 

ルーターのconnnectコードは同じままになります。それがあなたのために働かなかったかどうか親切に尋ねる。

+0

私はこれを試しましたが、うまくいかないようです。 FlightsControllerの$ nameを 'Flight'に変更しましたが、example.com/flightにアクセスしようとすると、FlightControllerが見つからないと表示されます。 – Jelmer

+1

いいえ、name変数はPHP4との下位互換性を保つためのものです。コントローラは、ルーティングが実行された後にロードされるため、ルーティングに影響を与えません。 – cgTag

1

ルーティングでこれを行うには、正しい方法は次のとおりです。 indexアクションを使用することです

Router::connect('/flight', array('controller'=>'flights','action'=>'index')); 
Router::connect('/flight/:action/*', array('controller'=>'flights')); 

これは、アクションがURLで発見されたときにそれを使用することをルータに指示しますが、それは全くのparamsは、デフォルトに発見されません。

0

私はこのすべてを少し違っています。複数形はもっと正確なものですが、複数形が間違っている場合はInflectorクラス(/ lib/Cake/Utility/Inflector)に例外を追加します。

この例ではをuninflected個のリストに追加します。これは、システム全体のケーキが 's'を付加しないことを意味します。あなたは...あなたのLogControllerあなたの意見はLogビューフォルダなどに座っているだろう、私はapp/config/bootstrap.php

Inflector::rules(
    'plural', 
    array(
     'uninflected' => array('log') 
    ) 
); 
内からこれを行うには非常に滑らかな印象の方法に遭遇しました

EDIT

を持っています

これにより、コア内のファイルを変更しなくても、バージョンを簡単に更新できるようになり、無修正リストにlogが追加されます。

+0

しかし、それは私がコアでファイルを編集することを意味する。私は欲しくない。私はボタンをクリックしてCakeを更新できるようにしたいからです。だから、おそらく私はクラスを拡張する必要がありますが、それは本当に痛みになるでしょう。私はそこにいくつかの素晴らしい方法があると思う。私は時間があるときにそれを研究します:) Tnxは思考のために – Jelmer