【问题标题】:Pathfinder: accessing Admin models from Frontend探路者:从前端访问管理模型
【发布时间】:2012-04-03 04:06:24
【问题描述】:

在我的应用程序中(位于 webroot 的子目录中),我有一个管理区域,其中包含用于类别类型查找的模型。在主前端应用程序中,我有其他模型引用了 Admin 中定义的查找。 例如。 Model Expense 是在 Frontend 中定义的,它引用了 Model ExpenseType(它是 Admin/lib/Model 中定义的 Model Lookup 的子类:

webroot
    My atk4 project
     -admin
        -lib
           -Model
              -Model_Lookup with subclass ExpenseType
     -atk4
     -atk4-addons
     ..
     -lib
        -Model
           -Model_Expense with reference to model ExpenseType
     ...

使用 CRUD 打开费用页面时 -> setModel('Expense') 我收到“致命错误” - 找不到 Model_ExpenseType。因此,据我了解(仅从 atk4 开始),我需要将位置添加到 Pathfinder,但我不知道该怎么做,以便前端模型可以访问管理模型。

【问题讨论】:

  • 没有解决问题,但实施了一个可行的解决方案:将所有模型从 admin/lib/Model 移动到 lib/Model。费用页面仍然找不到 Model_ExpenseType,它是 Model_Lookup 的子类。当我将 Model_ExpenseType 替换为 Model_Lookup 以获取 Expense 参考时,一切正常。所以我将 Model_ExpenseType 移到了一个单独的文件中,所以现在我仍然不确定哪个是最好的方法,但一切都按预期工作。

标签: atk4


【解决方案1】:

试试

$this->pathfinder->addLocation('admin',array(
    'php'=>'lib'
));

在你的 Api::init() 中

【讨论】:

  • 非常感谢!事实证明我离得不远——我有 $this->addLocation 而不是 $this->pathfinder->addLocation。有一件事仍然有点模糊 - Frontend 中定义的模型 Expense 仅在单独的文件中找到 ExpenseType(在 Admin 中定义的 Lookup 的子类),而模型 Material(在 Admin 中定义)找到在 Lookup 中定义的模型 MaterialType(Lookup 的另一个子类) .php,无论查找模型是在管理还是前端。要走的路是什么?我应该总是将模型子类放在他们自己的文件中吗)谢谢。
  • 最好每个类都在其各自的文件中。还可以尝试重命名文件并检查错误输出,它会告诉您正在搜索哪些位置,可能位置顺序不同,可能导致首先找到不同的文件。
【解决方案2】:

我有时会这样做:

given: webroot/lib/Model

cd webroot/admin/lib
ln -s ../../lib/Model .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多