Как правило, хорошая идея взаимодействовать с базой данных в виде слоя в рамках MVC?
main.blade.php
и: @include("inc.header")
Если нужно, как правильно подключиться к базе данных из inc/header.php
?
Я не хочу делать несколько соединений один здесь в header.php
и один в моих контроллерах страниц.
Я больше знаком с PDO, чем методы базы данных Laravel и ORM.
Любые советы приветствуются!
редактировать
Друзья дали хороший совет и ответы о MVC и Laravel workflow, но моя главная забота все еще здесь.
Хорошо, я использовал контроллеры и модели для получения требуемых данных, тогда, как я уже сказал, он должен присутствовать для слоя представления на каждой странице. Так что я должен повторить ту же задачу, чтобы получить те же данные во всех действиях моих контроллеров? (Я думаю, именно поэтому у нас есть фильтры здесь, то опять же, нормально ли использовать db в фильтрах Laravel? Используя модель?)
Заранее спасибо 🙂
Никогда не делайте ничего, кроме цикла, через свои данные в своем слое просмотра. В принципе, обычный шаблон MVC в laravel может быть примерно таким:
Все начинается с слоя маршрутизации (который, кстати, фантастичен в laravel)
Использование закрытий
Route::get('/home', function() { //Here data is an array, normally you would fetch data //from your database here and pass it to the View. $data = array('this', 'is', 'my', 'data-array'); return View::make('my.view')->with(compact('data'); });
Использование контроллеров (и метода контроллера)
//the same route is bound to a controller method Route::get('/home','HomeController@myFunction');
Контроллер для вышеуказанного может выглядеть примерно так:
<?php class HomeController extends BaseController { //The function you call from your route public function myFunction() { $data = array('this', 'is', 'my', 'data-array'); return View::make('my.view')->with(compact('data'); } }
В приведенном выше примере показан только VC в MVC, но, как правило, вы передаете данные из своих моделей таким же образом.
Вот быстрый:
Использование модели в контроллерах
public function myFunction($user) { $userdata = User::find($user)->orderBy('firstname', 'desc'); $infodata = Event::find(1)->course; return View::make('my.view')->with(compact('data', 'infodata'); }
Поэтому идея заключается в том, что laravel позволяет вам делать что-то разными способами. Если у вас небольшое приложение и вы можете управлять без контроллеров, вы можете пропустить контроллер и сохранить все на своем уровне маршрутизации.
Однако для большинства приложений контроллеры необходимы для управления потоком данных в приложении.
Если вы полностью новичок в MVC, вы должны проверить некоторые вопросы по этому вопросу.
РЕДАКТИРОВАТЬ:
Ахи! Таким образом, вы хотели поделиться некоторыми данными во всех своих взглядах! Ну, это просто. Поскольку все ваши контроллеры расширяют BaseController, вы можете просто передать туда данные. Вот так:
class BaseController extends Controller { public function __construct() { $data = array('alot', 'of', 'data'); return View::share('data', $data); } }
Теперь переменная данных доступна во всех представлениях.
PS. Фильтры предназначены для фильтрации материала, например, для проверки того, что некоторые вещи «хорошо». Это может включать в себя проверку пользователей автономного режима, или представление форм и т. Д.
Существует еще одно решение, которое особенно удобно для таких случаев, как ваш. Если у вас есть 15 маршрутов, которые в конечном итоге включают представление inc.header … ну, вы можете видеть, куда это происходит. В нескольких местах будет повторяться логика данных. Патрик предложил использовать BaseController, который является хорошим решением, но я предпочитаю использовать композитор.
View::composer('inc.header', function ($view) { $view->some_data = MyModel::where(...)->get(); });
Тогда это становится намного легче. 🙂
Как правило, хорошая идея взаимодействовать с базой данных в виде слоя в рамках MVC?
Нет, вы не взаимодействуете со своей базой данных (моделью) в своем слое просмотра. MVC означает «Model View Controller» для разделения логики, данных приложений и бизнес-правил вашего приложения.
Если нужно, как правильно подключиться к базе данных из inc / header.php?
Я не хочу делать несколько соединений один здесь в header.php и один в моих контроллерах страниц.
Вы можете создать основной макет (содержащий свой заголовок) и использовать этот макет для всех страниц вашего приложения:
app/views/ layouts/main.blade.php page1.blade.php
layouts / main.blade.php :
<html> <head>...</head> <body> <div>Your header that will be included in each of your pages</div> <!-- The content of the current page: --> @yield('body') </body> </html>
page1.blade.php :
@extends('layouts.main') @section('body') <div>The content of your page</div> @stop
Узнайте больше о модуле Blade templating .
Теперь, где вы извлекаете данные?
Самый быстрый / простой способ разработки – использовать маршруты в качестве контроллеров, и по мере того, как ваше приложение развивается, вы начинаете рефакторинг кода и создаете контроллеры.
app / routes.php :
Route::get('page1', function(){ //Fetch your data the way you prefer: SQL, Fluent or Eloquent (Laravel ORM) //$data = DB::select('select * from yourtable'); $data = YourModel::all(); //Pass your data to the view return View::make('page1') ->with('data', $data); });
Данные можно извлекать с использованием класса Fluent или Eloquent ORM .
Я предлагаю вам изучить основы Laravel, чтобы правильно создать базу вашего приложения, поэтому в будущем это будет очень просто поддерживать.
Ответ и вопрос здесь не так просты. Сначала только что были представлены MVC и пытались понять основную концепцию, поток для MVC – это Controller-> Model-> View. Здесь мы видим, что данные передаются из модели непосредственно в представление. Текущие примеры использования Laravel MVC – это вернуть данные модели к контроллеру, создав поток следующим образом: Conntroller-> Model-Controller-> View. Здесь мы видим, что модель и представление не знают друг о друге. Взгляд qucik на википедию показывает, что этот тип моделирования и контроля имеет MVA. A предназначен для адаптера и также известен как посреднический контроллер, поэтому теперь мы вернемся к ответу здесь. Должны ли мы использовать MVA или MVC? Как достичь истинного MVC в Laravel? Ответ заключается в использовании фасада {{Form: model}} для истинного MVC. Но что произойдет, если изменится представление? мы должны вызывать модель из представления, чтобы получить новые данные? Ответ – нет, если вид должен измениться, пользователь должен был заставить контроллер реагировать на новый цикл MVC. Итак, что мы можем видеть здесь, сочетание MVC и MVA с использованием структуры Laravel, может обеспечить высоко настраиваемый поток, основанный на потребностях сайта.