php - Silverstripe 关系在详细信息页面上不可见

标签 php silverstripe

正在模板 CoursePage.ss 上循环教师关系,但是当我尝试在 CoursePage_details.ss 内循环该关系 teachers 时不起作用。我做错了什么。

我有两个模型类(class)教师

  1. 类(class)可以有很多老师
  2. 老师可以上一门类(class)

类(class).php

class Courses extends DataObject 
{
     private static $many_many = array(
        'Teachers' => 'Teachers',
    );
}

Teachers.php

class Courses extends DataObject 
{
     private static $belongs_many_many = array(
        'Courses ' => 'Courses ',
    );
}

CoursesPage.php

class CoursesPage extends Page
{

}

class CoursesPage_Controller extends Page_Controller
{
    public static $allowed_actions = array(
        'details'
    );

    // Show specific course

    public function details(SS_HTTPRequest $request)
    {
        $c= Courses::get()->byID($request->param('ID'));

        if(!$c) {
            return $this->httpError(404, "Courses not found");
        }

        return array(
            'Courses' => $c,
        );
    }

    // Courses list

    public function CoursesList ()
    {
       $c = Courses::get()->sort('Featured', 'DESC');

        return $c;
     }
}

CoursesPage.ss

在这个文件中我只是循环类(class),没什么重要的。这里我循环列出类(class)和教师。在这里,教师循环工作完美,只是不适用于详细信息模板。

CoursesPage_details.ss

这里有问题。当我显示有关特定类(class)的详细信息时,我想循环与该类(class)相关的教师,但我总是得到NULL返回教师不存在。看起来不在范围内。

<section class="course-details">
    <h2>$Courses.Name</h2> <!-- Work -->
    <p>$Courses.Descr</p>

    <ul class="teachers-list">
        <% if $Teachers %> <!-- Not work here, but on CoursePage.ss work -->
            <% loop $Teachers %>
                 $FirstName
            <% end_loop %>
        <% else >
           Teachers does not exist
        <% end_if %>
    </ul>
</section>

最佳答案

您需要使用$Courses.Teachers相反...或者您可以使用 <% with $Courses %> 将范围更改为类(class)。所以你的模板将如下所示:

<section class="course-details">
<% with $Courses %>
    <h2>$Name</h2>
    <p>$Descr</p>

    <ul class="teachers-list">
        <% if $Teachers %> 
            <% loop $Teachers %>
                 $FirstName
            <% end_loop %>
        <% else >
           Teachers does not exist
        <% end_if %>
    </ul>
<% end_with %>
</section>

原因是:您正在传递您的 Course DataObject 作为参数添加到模板,名为 Courses 。正是这个 DataObject 与教师有关系,因此您需要使用 $Courses.Teachers或更改上述范围。 默认情况下,您仍在 CoursesPage 的范围内.

关于php - Silverstripe 关系在详细信息页面上不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160512/

相关文章:

php - 处理具有多个版本、适配器或工厂的类?

php - 递归函数

php - SilverStripe 中的相关博客文章

html - 我的 Page.ss 不会加载 css 和脚本 SilverStripe v4.2.1

content-management-system - 在 SilverStripe CMS 中移动元数据字段?

php - 如何将 URL 变量传递给 Silverstripe 中的表单

PHP 脚本 - 事件描述不反射(reflect)记录值

javascript - Google Directions Api JavaScript 将 API key 链接到 php 文件

php - PHP 和 MySQL 中的双重显示问题

silverstripe - 如何翻译托管模型选项卡?