簡體   English   中英

Phalcon路由器似乎沒有設置

[英]Phalcon router doesn't seem to be set

我已經設置了自定義路由,我的routes.php目前看起來像這樣:

<?php
$router = new Phalcon\Mvc\Router();

$router->add('athlete/{username}', array(
    'controller' => 'athlete',
    'action' => 'index',
));

return $router;

在我的services.php中,我正在設置路由器:

$di->set('router', function() {
    return require __DIR__ . '/routes.php';
});

我的AthleteController的索引動作看起來像這樣,出於測試目的,我將param傳遞給視圖( username ):

public function indexAction()
{
    $username = $this->dispatcher->getParam('username');

    if (!isset($username)) {
        $user = Users::findFirstByUsername($this->auth->getIdentity()['username']);
    } else {
        $user = Users::findFirstByUsername($username);
        if (!$user) {
            $this->flash->error('Could not find this user');
        }
    }
    $this->view->user = $user;
    $this->view->username = $username;
    $this->view->setTemplateBefore('public');
}

當我沒有使用自定義參數時,它可以工作,它可以找到用戶並顯示他的用戶名。 然而,當我使用例如url athlete/kerowan ,我得到錯誤Action 'kerowan' was not found on handler 'athlete' ,根據我的理解,這意味着,路由器某種程度上設置不正確或者沒有抓住網址。 有任何想法嗎?

前段時間我遇到了同樣的問題,我在文檔或論壇中找不到如何使用可選參數創建路徑。 我想出的最佳解決方案是,如果我希望方法具有不同的行為(如在您的示例中),則有兩條路由。 這將為您解決問題:

$router->add('/athlete/{username}', 'Athlete::index');
$router->add('/athlete', 'Athlete::index');

如果有人有更好/更優雅的解決方案請分享:)

默認情況下,phalcon的路由器在此約定中使用自動路由: '/:module/:controller/:action/:params多模塊應用程序中的'/:controller/:action/:params和單模塊應用程序中的'/:controller/:action/:params 如果你想擺脫它,那么你必須將false傳遞給路由器構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM