2017-11-15 5 views
0

私はPHP Phalconで作成されたウェブサイトを持っており、いくつかのコントローラがあります。PhalconPHPのルータで動的アクション/スラッグを定義する

URLにある単語(example.com/WORD)を受け取ってデータベースに存在するかどうかを確認するには、このWebサイトが必要ですが、example.com/aboutmeのような他のコントローラも引き続きサポートする必要があります。

さまざまな方法を試してオンラインで検索した後、私はこのタスクを達成する方法を見つけることができません。より近い意図は、存在しないアクションを新しいコントローラにリダイレクトするルートを作成していましたが、私はこのソリューションを動作させることはできません。

コード/アイデアを共有して解決する可能性のあるソリューションについて考えることはできますか?私は何か便利なことをすることができなかったので、私はコードを追加していません。

答えて

1

これはまったく問題ではありません。サンプル経路は次のとおりです。

// Default - This serves as multipurpose route definition 
// I can use it to create non pretty urls if I don't want to define them. 
// Example: profiles/login, profiles/register - Don't need those pretty :) 
$router->add('/:controller/:action/:params', ['controller' => 1, 'action' => 2, 'params' => 3]); 
$router->add('/:controller/:action', ['controller' => 1, 'action' => 2]); 
$router->add('/:controller', ['controller' => 1]); 

// Product page - www.example.com/product-slug-here 
$router->add('/{slug}', 'Products::view')->setName('product'); 

// Blog 
$router->add('/blog/{slug}', 'Blog::view')->setName('blog'); 
$router->add('/blog', 'Blog::index')->setName('blog-short'); 

// Contacts - Pretty urls in native website language 
$router->add('/kontakti', 'Blabla::contacts')->setName('contats'); 
0

結局のところ、ルールは機能しませんでしたので、回避策が出ました。コントローラが存在せず、そこでコードを実行しているときに発生した例外をキャッチしています。今のところ唯一の問題は、スパゲッティコードに寄与する苦い味です:-(

try{ 
    $application = new Application($di); 
    echo $application->handle()->getContent(); 
} 
catch(\Phalcon\Mvc\Dispatcher\Exception $e) 
{ 
    $word = substr($e->getMessage(), 0, strpos($e->getMessage(), "Controller")); 
    // RUN ESPECIFIC CODE HERE 
} 
関連する問題