2012-11-05 11 views
5

Właśnie realizowanych nazw w moim małym aplikacji, jak opisano tutaj: http://www.yiiframework.com/doc/guide/1.1/en/basics.namespacePrzestrzenie nazw w PHP uniemożliwiające korzystania z Yii statycznych funkcji

używam do problemu gdzie mój kontroler nie będzie już dostępu Yii::app()->getRequest(); mówiąc, że nie może znaleźć include(C:\Users\bkuhl\htdocs\instaLabel\application\protected\components\Yii.php): failed to open stream: No such file or directory.

Rozumiem, że to dlatego, że zadeklarowałem obszar nazw jako aplikację/komponenty. Ale nie jestem pewien, jak obejść ten jeden ...

<?php 

namespace application\components; 

/** 
* Controller is the customized base controller class. 
* All controller classes for this application should extend from this base class. 
*/ 
class Controller extends \CController { 
    /* @var $request CHttpRequest */ 
    protected $request = null; 

    /** 
    * @var string the default layout for the controller view. Defaults to '//layouts/column1', 
    * meaning using a single column layout. See 'protected/views/layouts/column1.php'. 
    */ 
    public $layout='//layouts/column1'; 
    /** 
    * @var array context menu items. This property will be assigned to {@link CMenu::items}. 
    */ 
    public $menu=array(); 
    /** 
    * @var array the breadcrumbs of the current page. The value of this property will 
    * be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links} 
    * for more details on how to specify this property. 
    */ 
    public $breadcrumbs=array(); 

    public function __construct ($id, $module = null) { 
     parent::__construct($id, $module); 

     $this->request = Yii::app()->getRequest(); 
    } 

Odpowiedz

3

Należy całkowicie zakwalifikować względną nazwę klasy Yii.

Najbardziej wygodny sposób to zrobić przez importing klasy: wystarczy dodać use Yii; poniżej deklaracji przestrzeni nazw.

+0

to zdecydowanie lepiej, gdy masz wiele wystąpień 'Yii' w klasie. –

+0

Czy to samo, co 'use Yii/Yii;'? – Webnet

+0

@Webnet: To nie jest poprawna składnia. Nawet gdyby było, to odnosiłoby się do klasy 'Yii' wewnątrz przestrzeni nazw' Yii'. Nie ma przestrzeni nazw 'Yii', więc w każdym razie byłoby to bez znaczenia. – Jon

2

Czy próbowałeś:

$this->request = \Yii::app()->getRequest(); 

\ użyje global namespace:

Poprzedzenie nazwę z \ określi, że nazwa jest wymagana z przestrzeni globalnej, nawet w kontekście przestrzeni nazw.

+0

brakowało mi w mojej odpowiedzi, gdy masz wiele wystąpień 'Yii' zdecydowanie lepiej będzie użyć' użyj Yii; 'jak sugeruje Jon, ale dla jedynego przypadku możesz użyć \ –