我有一个扩展Controller的MainController。我的所有应用程序的控制器都从MainController扩展而来,其中包括需要从任何Controller访问的各种方法和属性。
在我的MainController中是beforeAction
,它做了几件事:
<head>
数据pages
表中的一个匹配,则会从模板中呈现通用页面。这是我最后一次挣扎。在我的MainController中我有这个:
/**
* Before action, check all $this->before_actions satisfy. If no head_data provided, try and fill in some basics
*/
public function beforeAction( $action )
{
// Run parent method first
if (!parent::beforeAction($action))
return false;
// Check redirects
$this->checkRedirects();
if( $this->checkPages() )
{
// If not error page, loop through before methods
if( $action->id !== 'error' )
{
// Loop through actions to peform and do them
foreach ( $this->before_actions as $before_method )
$this->$before_method();
}
return true;
}
}
其中$ this-&gt; checkPages()包含以下内容:
/**
* Check for pages
*/
public function checkPages()
{
// Attempt to find page for this request
$page = Page::find()->where( [ 'permalink' => trim( str_replace( getBaseUrl() , "", getCurrentUrl() ), "/" ) ] )->one();
// If found, load it instead
if( !empty( $page ) )
return Yii::$app->runAction( "pages/show", [ 'id' => $page->id ] );
// Else, return
return true;
}
我遇到的问题是,如果我转到http://example.com/story,因为没有StoryController,虽然动作确实运行并且输出了视图“views / story / show”,但会返回404错误。 / p>
我该如何防止这种情况?
编辑:
要添加,日志显示它首先说:
"Unable to resolve the request 'story/index'"
。
但是其他日志显示:
"Route to run: pages/show"
... "Running action: app\controllers\PagesController::actionShow()"
..
Rendering view file: /Users/stefandunn/Documents/Local Machine Development/views/pages/show.php
所以我猜这是导致404状态的第一个日志结果
答案 0 :(得分:0)
添加最后一条可以捕获任何模式并重定向到自定义操作的路由。
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
//...
'<any:.*>' => 'site/index'
],
],