Phalcon php 命名空间无法使用
Phalcon php namespaces cant use
所以我有命名空间的用户模型:
namespace App\Models;
use Phalcon\Mvc\Model;
class Users extends Model
{
和控制器:
use \Phalcon\Mvc\Controller;
use \App\Models\Users;
class LoginController extends Controller
{
...
public function postLoginAction() {
$user = Users::findFirst([ ...
}
...
总是出现错误致命错误:未捕获错误:Class 'App\Models\Users' not found in 无论如何,尝试了每一个变体不知道它有什么问题.甚至我的 IDEA 也正确地解决了这个 class。
如果我删除命名空间,一切正常。
更新:
因此,如果您使用 phalcon 开发工具生成项目,然后开始生成其他东西(模型、控制器),您将需要为模型提供命名空间,但它不会起作用,您还需要更新 app/config/loader .php 像这样:
<?php
$loader = new \Phalcon\Loader();
/**
* We're a registering a set of directories taken from the configuration file
*/
$loader->registerDirs(
[
$config->application->controllersDir,
$config->application->modelsDir
]
)->register();
$loader->registerNamespaces(
[
'App\Controller' => $config->application->controllersDir,
'App\Model' => $config->application->modelsDir,
]
)->register();
换句话说注册命名空间,我不知道为什么这在文档中没有明确说明,但它接缝这个框架有很多这样的 "black holes" 或者我不明白这个框架的基础知识(来自 codeigniter 和Laravel背景)。
在您的 bootstrap 文件中试试这个:
// registers namespaces
$loader = new Loader();
$loader->registerNamespaces([
'App\Controllers' => APP_PATH . '/controllers/',
'App\Models' => APP_PATH . '/models/'
]);
$loader->register();
顺便说一句,APP_PATH
可以是您应用程序目录的常量,或者您 want/need.
所以我有命名空间的用户模型:
namespace App\Models;
use Phalcon\Mvc\Model;
class Users extends Model
{
和控制器:
use \Phalcon\Mvc\Controller;
use \App\Models\Users;
class LoginController extends Controller
{
...
public function postLoginAction() {
$user = Users::findFirst([ ...
}
...
总是出现错误致命错误:未捕获错误:Class 'App\Models\Users' not found in 无论如何,尝试了每一个变体不知道它有什么问题.甚至我的 IDEA 也正确地解决了这个 class。
如果我删除命名空间,一切正常。
更新:
因此,如果您使用 phalcon 开发工具生成项目,然后开始生成其他东西(模型、控制器),您将需要为模型提供命名空间,但它不会起作用,您还需要更新 app/config/loader .php 像这样:
<?php
$loader = new \Phalcon\Loader();
/**
* We're a registering a set of directories taken from the configuration file
*/
$loader->registerDirs(
[
$config->application->controllersDir,
$config->application->modelsDir
]
)->register();
$loader->registerNamespaces(
[
'App\Controller' => $config->application->controllersDir,
'App\Model' => $config->application->modelsDir,
]
)->register();
换句话说注册命名空间,我不知道为什么这在文档中没有明确说明,但它接缝这个框架有很多这样的 "black holes" 或者我不明白这个框架的基础知识(来自 codeigniter 和Laravel背景)。
在您的 bootstrap 文件中试试这个:
// registers namespaces
$loader = new Loader();
$loader->registerNamespaces([
'App\Controllers' => APP_PATH . '/controllers/',
'App\Models' => APP_PATH . '/models/'
]);
$loader->register();
顺便说一句,APP_PATH
可以是您应用程序目录的常量,或者您 want/need.