我正在使用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' => []]);
// ...
尽管如此,我个人并不喜欢作者的实现。
- 他/她用或多或少相同的现有数据修改相同的结果集(
$data
)。仅重命名关键帧。这同样可以通过使用查询生成器的->select(...)
方法对表列名进行混叠来实现 - 他/她使用
->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')