2015-08-05 2 views
0

Я создал common.php для всей моей глобальной функции. Когда я запускаю свою первую функцию {{Common :: test()}}Laravel 5.1 - Как использовать модель в глобальном файле функций

Он работает нормально Но я не могу использовать в нем модель.

namespace App\library; 
{ 
    class Common { 

      public static function test() 
      { 
       echo "Yes"; 
       return "This comes from Common File"; 
      } 
      public static function getCmsBlocks() 
      { 
       $model = Modelname::all(); 
       if($model){ 
        echo "asdad"; 
       }else 
       { 
        echo "sadasd"; 
       } 
      } 

    } 
} 

Я не получаю мой вывод, когда я бегу {{Общие :: getCmsBlocks()}}

+0

У вас возникли ошибки? Зная, что помогло бы –

+0

Да, я получил роковую ошибку, например Class 'App \ library \ Modelname', не найден –

+0

Хорошо, так что см. Ответ :) –

ответ

1

Если ваша модель находится в другом пространстве имен, чем App \ библиотеки вам нужно будет префиксом имя класса модели с его пространством имен, иначе PHP попытается загрузить App \ library \ Modelname, который может и не быть тем, что вам нужно.

Заменить

$model = Modelname::all(); 

с

$model = \Your\Model\Namespace\Modelname::all(); 

Если вы используете ModelName класса в множественном месте в объявленных именах, вы можете импортировать/псевдоним, используя Используйте заявления, так что вы можете обратитесь к этому классу по имени класса в вашем коде:

namespace App\library; 
use Your\Model\Namespace\Modelname; 
{ 
    class Common { 
    public static function getCmsBlocks() 
    { 
     $model = Modelname::all(); //this will work now 
    } 
    } 
} 

Невозможно определить глобальный , который должен быть подключен ко всем пространствам имен в вашем файле, так как use всегда ссылается на объявляемое пространство имен.

+0

Большое вам спасибо. Он отлично работает, но каждый раз мне нужно объявить пространство имен в моем common.php? это невозможно, так как мы объявляем модель в глобальном файле, а доступ к common.php - автоматически? –

+0

Можно объявить его один раз за пространство имен, которое вы объявляете, но это все - я обновлю ответ на мгновение. Невозможно объявить «использование» глобально, поскольку оно ВСЕГДА ссылается на определяемое пространство имен. –

+0

Отлично, так что это означает, что если у меня есть модель 20+, поэтому мне нужно объявить всю модель в моем файле common.php сразу же? –

1

Как над ответом является совершенным, но лишь немногим дополнением, если вы не хотите включать пространство имен каждый раз при запуске на каждый файл

Используйте это:

\App\ModelName::all(); 
\App\ModelName1::update(item); 
\App\ModelName2::find(1); 

дает путь, как и выше, и не будет необходимости использовать пространство имен каждый раз.

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

+0

Вы правы, но это работает только для одной модели. Как я могу определить всю модель в моем файле common.php –

+0

снова проверить ответ –

Смежные вопросы