Php 在没有路由的情况下执行Yii模块

Php 在没有路由的情况下执行Yii模块,php,yii,url-routing,clean-urls,Php,Yii,Url Routing,Clean Urls,我有一个名为article的模块。它存在于Collow文件夹中: - protected - modules - article - controllers ArticleController.php - views -article articleModule.php 因为我正在做C

我有一个名为article的模块。它存在于Collow文件夹中:

- protected
      - modules
           - article
                 - controllers
                   ArticleController.php
                 - views
                       -article
             articleModule.php
因为我正在做CMS。我选择不使用控制器或操作的直接链接。这意味着调用example.com/article/article/index。这是行不通的。因为CMS将url请求视为页面。(因此,它会查找一个名为“index”的页面,其中包含父级的“article”和“article”。这样的页面不存在

CMS加载一个有效页面的块,对于其中一个块,我想执行文章模块

Yii::app()->runController($route). 
但是,为此,您需要一条路线

是否可以运行这样的模块,使模块的工作方式与访问url example.com/article/article相同

或者如果不可能。如何设置Url管理器,使其能够处理页面?。使用干净的Url。以下是一些示例:

example.com/join_us  
example.com/join_us/contact 
example.com/news/ 
example.com/countries/us/healthcare 

以上是用户可以创建和更改的页面。我已经为此绞尽脑汁很长时间了。通常这是一件容易的事情。但Yii让这件事变得非常困难。主要是因为控制器或模块链接到一条路线。

将其放在主配置中:

'urlManager'=>array(
    'urlFormat'=>'path',
        'showScriptName'=>false,
        'caseSensitive'=>false,
    'rules'=>array(
        'gii'=>'gii',
        '<controller:\w+>/<id:\d+>'=>'<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
        '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        '<action>'=>'site/<action>',
    ),
),
如果存在目录或文件,请直接使用它:

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d
您可以将所有内容路由到article controller。Yii使用规则从上到下的顺序,因此首先定义一些特定的规则,最后定义一些类似于“全部捕获”规则的规则。这应该可以:

// Url manager rules
// Some of example non-article rules
'login' => 'userModule/user/login'
'logout' => 'userModule/user/login'
// Below regex rule catch any string and pass it to $_GET['ariticlePath'] 
// and executes action `article` of controller `article` of module `article` 
'<ariticlePath:.+>' => 'article/article/article'

现在还不清楚您想要什么。是否所有URL都应该只通过一个操作提供(在
模块/文章
中)?如果没有,应该排除哪些URL?向我们展示您的urlManagerrules@MichaelHärtl Harti标准索引操作和使用get的所有其他操作params@Soju,目前我已将所有内容写入处理所有干净url的pageController。
code
“urlManager”=>数组('urlFormat'=>'path','showScriptName'=>false','rules'=>array('(.*)=>'page/index',),),否则,如果我填写一个自制的干净url,它将被视为一个类型。但这样的模块或控制器不存在。@Virtlink为什么你会对我的答案进行评分?是的,为什么?我不知道,一定是其他人。我只编辑了它。@Virtlink感谢您的建议。但是,类似于我们的链接现在转到siteController中的操作。对于每个页面,我现在需要在siteController中进行操作。子页面也不像join_us/contact那样工作。您能解释一下这个想法吗。再次感谢您的回复。我尝试实现的是运行模块(如果它们存在于该文件夹中)。否则,将url和子url发送到标准控制器,比如siteController。这就是检查它是否是有效页面。这是我目前的想法。更新:我将最后一行更改为
'=>'page/index'
。它似乎适用于所有第一级父URL,但不适用于任何第二、第三级及以后的URL。有趣的是,3个标准Yii控制器操作规则
'/'=>'/'
似乎是先开发票,然后是最后开发票的第四个动作规则。第三个动作规则很重要,但它似乎与我以前的
'(.*)=>'page/index'
的单一规则相冲突。如果我将此单一规则放在第三个控制器动作规则之后。@Minahalmon你必须问文章作者Gunnit。我只是澄清了它。+1,但不使用
$\u GET['articlePath']
,您只需将
$articlePath
参数添加到控制器操作函数nice中,这似乎是一个新功能,因为我正在阅读基础知识:)仍在努力让他工作。我已经加入了上述3条编写规则。并删除了我的(*)规则到pageController。但它现在转到登录页。因为这是它的第一个规则。我尝试填写index.php/?articlepath=get。但现在它转到由siteController处理的标准Yii欢迎视图 RewriteRule . index.php
// Url manager rules
// Some of example non-article rules
'login' => 'userModule/user/login'
'logout' => 'userModule/user/login'
// Below regex rule catch any string and pass it to $_GET['ariticlePath'] 
// and executes action `article` of controller `article` of module `article` 
'<ariticlePath:.+>' => 'article/article/article'
...
public function actionArticle($articlePath)
...