Проблемы генерации кода модуля Yii с использованием Gii - PullRequest
3 голосов
/ 27 июня 2011

Я только что использовал Gii для создания нового модуля под названием gig. После генерации кода модуля с помощью Gii я обновил файл config / main.php, добавив модуль 'gig' следующим образом:

'import'=>array(
    'application.models.*',
    'application.components.*',
    'application.modules.*',
),

'modules'=>array(
    // uncomment the following to enable the Gii tool

    'gii'=>array(
        'class'=>'system.gii.GiiModule',
        'password'=>'secretpassword',
    ),
    'gig',
),

Теперь, когда я пытаюсь получить доступ к автоматически сгенерированному коду модуля Yii в моем браузере следующим образом:

http://localhost/gig/default/index/

Я получаю следующую ошибку:

DefaultController не может найти запрошенное представление "index".

Чтобы исправить эту проблему, я изменил код рендеринга в модуле DefaultController.php из этого:

$this->render('index');

к этому:

$this->render('gig.views.default.index');

Это изменение решило проблему, но мне интересно, пропустил ли я что-то или Gii генерирует код с ошибками для модулей? Кто-нибудь сталкивался с этой проблемой раньше? Правильно ли мое решение?

Теперь, когда контроллер может найти представление, я перезагрузил страницу, только чтобы было показано это сообщение об ошибке:

Попытка получить свойство необъекта

Оказывается, что существует проблема со следующим кодом в файле представления index.php:

$this->breadcrumbs=array(
$this->module->id,

);

Я не уверен, почему это происходит. Я попытался изменить приведенный выше код на следующее:

$this->breadcrumbs=array(
Yii::app()->controller->module->id,

);

но это все равно выдает мне сообщение об ошибке "Попытка получить свойство необъекта".

Есть идеи, что может быть не так? Я что-то упускаю при настройке кода модуля? Я использую Yii 1.1.7

Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 июня 2011

Извините, это была наша собственная глупая ошибка. Один из наших программистов добавил метод __construct в класс Controller и забыл включить переменную $ module в этот метод следующим образом:

public function __construct($id='site')
{
    parent::__construct($id);

    //custom code here
}

После добавления переменной $ module, как показано ниже, теперь все работает нормально.

public function __construct($id='site', $module = null)
{
   parent::__construct($id, $module);
}
1 голос
/ 28 июня 2011

Если вам не нужны хлебные крошки, просто удалите этот блок кода.Если вы хотите их, убедитесь, что ваш класс Controller.php (который расширяет CController.php) имеет:

public $breadcrumbs=array();

Тогда он должен работать как положено.

Я не уверен, почемуу вас были проблемы с URL / путями, но проверьте ваш менеджер URL в config / main.php, чтобы увидеть, может ли быть правило, вызывающее проблемы.Кажется, работает для меня без каких-либо правил, но если у вас есть, попробуйте сначала поместить это в массив правил:

'gig'=>'gig',
'gig/<controller:\w+>'=>'gig/<controller>',
'gig/<controller:\w+>/<action:\w+>'=>'gig/<controller>/<action>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...