如何将 FullCalendar 'v3' 库集成到 CodeIgniter4 中。抛出错误'Undefined variable $data'



我正在使用CodeIgniter 4。我想做这个完整的日历,我遵循了教程中的每一步

**ErrorException未定义变量$data**

这是我的查看文件

<div class="container">
<h1>Codeigniter Fullcalendar</h1>
<div class="row" style="width:50%">
<div class="col-md-12">
<div id="calendar"></div>
</div>
</div>
</div>

<script type="text/javascript">

var events = <?php echo json_encode($data) ?>;

var date = new Date()
var d    = date.getDate(),
m    = date.getMonth(),
y    = date.getFullYear()

$('#calendar').fullCalendar({
header    : {
left  : 'prev,next today',
center: 'title',
right : 'month,agendaWeek,agendaDay'
},
buttonText: {
today: 'today',
month: 'month',
week : 'week',
day  : 'day'
},
events    : events
})
</script>

这是我的控制器

public function index() {

$db = ConfigDatabase::connect();
$builder = $db->table('calendar');   
$query = $builder->select('*')
->limit(10)->get();

$data = $query->getResult();

foreach ($data as $key => $value) {
$data['data'][$key]['title'] = $value->title;
$data['data'][$key]['start'] = $value->start_date;
$data['data'][$key]['end'] = $value->end_date;
$data['data'][$key]['backgroundColor'] = "#00a65a";
}        
return view('calendar', $data);
}

我正在使用C14,并尝试在我的项目中使用完整的日历。但当我为Full Calendar尝试此代码时,就会发生这种情况。有人能帮助吗

问题是,当events数据库表中没有"事件">时,教程作者无法满足这种情况。

因此,在方法AppControllersFullCalendar::index()中,如果数据库中不存在事件,则不会设置$data['data']数组键,从而导致视图文件(app/Views/home.php)中未定义$data

快速修复 将通过为$data['data']数组键提供默认值来满足这种情况。I.e:

\App\Controllers\FullCalendar::index()

// ...
return view('home', array_key_exists('data', $data) ? $data : ['data' => []]);
// ...

尽管如此,我个人并不喜欢作者的实现。

  1. 他/她用或多或少相同的现有数据修改相同的结果集($data)。仅重命名关键帧。这同样可以通过使用查询生成器的->select(...)方法对表列名进行混叠来实现
  2. 他/她使用->getResult()返回一个对象数组,但根据用例,使用->getResultArray()纯数组就足够了

溶液:

\App\Controllers\FullCalendar::index()

<?php
namespace AppControllers;
use CodeIgniterController;
class FullCalendar extends Controller
{
/**
* Write code on Method
*
* @return string
*/
public function index()
{
$result = db_connect()
->table('calendar')
->select(['title', 'start_date AS start', 'end_date AS end'])
->limit(10)
->get()
->getResultArray();
array_walk($result, function (&$value) {
$value['backgroundColor'] = '#00a65a';
});
return view('home', ['data' => $result]);
}
}

附录

您可以在数据库表中添加一些事件来测试它。I.e:

INSERT INTO `calendar` (`id`, `title`, `start_date`, `end_date`)
VALUES (NULL, 'Ballet Dance', '2022-11-01', '2022-11-03'),
(NULL, 'San Antonio Health & Fitness Expo', '2022-11-15', '2022-11-18')

相关内容

  • 没有找到相关文章

最新更新