Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
получаю из БД данные:
public function eventsData(Request $request)
{
if ($request !== NULL){
$eventsObject = DB::table('events')->select('id', 'title', 'content')->get();
foreach($eventsObject as $event){
$data[] = $event;
}
// в $data в данный момент времени хранится массив из 2-х элементов, каждый из которых является объектом stdClass'a и содержит, соответственно, 3 поля: id, title, content
$view = view('home', $data);
return $view;
}
}
в представлении $data не определена:
что я хочу?
делаю админку. нужно получить список всех ивентов (айдишник, наименование и контент) и вывести списком:
<ul id='menu'>
<li class='menuItem'>{{ $data-id }}</li>
Изменено Anque (11.10.2017 13:30:47)
Не в сети
Не передается там параметр
view('home', $data)
нужно:
view('home', compact('data'))->render();
Ну и в целом подход очень странный. Почему не сделать модель и не обращаться через orm
Изменено vladislavTkachenko (11.10.2017 13:56:02)
Не в сети
не понял, как работает compact при передаче одной строки.
и в доке показан пример с передачей вторым аргументом массива, как я и делал.
Не в сети
У тебя $request никогда не будет null, зачем делать такую проверку? Зачем ты данные итерируешь и перезаписываешь в $data? Зачем определяешь переменную view?
Вот таким должен быть метод:
public function eventsData(Request $request)
{
return view('home', ['events' => $this->event->getEvents()]);
}
Если ты логику не хочешь выносить в модель или репозиторий, тогда хотя бы так:
public function eventsData(Request $request)
{
return view('home', [
'events' => Event::get(['id', 'title', 'content']);
]);
}
В представлении уже итерируй:
@foreach ($events as $event)
<div>{{ $event->title }}</div>
@endforeach
Изменено AlexeyMezenin (11.10.2017 14:19:26)
Не в сети
переделал малость.
вывод:
<ul id='menu'>
@foreach($events as $event)
<li class='menuItem'>
<a href='/getevents/{{$event->id}}'>
{{$event->title}}
</a>
<p>{{substr($event->content, 0, 200)}}..</p>
</li>
@endforeach
</ul>
контроллер:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Event as Events;class DataController extends Controller
{/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function eventsData(Request $request)
{
$events = Events::all();
return view('home', compact('events'));
}
}
как можно включить обработку html-тегов, которые содержатся в $event->content?
сейчас выводятся как текст.
Не в сети
не суть. вырезал их с помощью strip_tags, хочу ограничить длину (для вывода фрагмента текста):
<ul id='menu'>
@foreach($events as $event)
<li class='menuItem'>
<h4> <a href='/getevents/{{$event->id}}'>
{{$event->title}}
</a></h4>
<p> <i>{{substr(strip_tags($event->content), 0, 200)}}... </i></p>
</li>
@endforeach
</ul>
в итоге выводится только у одного элемента:
если без форматирования - выводятся оба текста
Изменено Anque (11.10.2017 14:44:07)
Не в сети
Не в сети
Страницы 1