Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 13.09.2018 12:37:04

Как привязать контроллер к шаблону

Добрый день , собственно вопрос по сабжу в книШках и инете пока ответа не нашел. Я включаю в шаблон подшаблон при помощи @include . Как мне к этому подшаблону прописать маршрут к контроллеру ??? Если делаю через Route и  @yield('content') то все работает. Но я хочу чтобы подшаблон всегда отображался в левой части контента например , независимо от выбранного маршрута. А контроллер нужен для выборки данных из базы. Надеюсь я правильно поставил вопрос.
А может я иду не по тому пути , прошу подсказать правильное решение. Спасибо.

Изменено DzonyBB (13.09.2018 12:37:46)

Не в сети

#2 13.09.2018 12:48:42

Re: Как привязать контроллер к шаблону

Вот контроллер

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Department;
use App\Category;
//use App\Http\Requests\CategoryRequest;
//use App\Subcategory;
//use App\Article;

class DepartmentController extends Controller
{
	 protected $layout = 'departments.department';
	
	public function department()
	{
		$department = Department::where('stat',0 )->
		  orderBy('department_id')->get();
		  
	     $category =Category::orderBy('category_id')->get();	
		
	  	return view("departments.departments",['department'=>$department,'category'=>$category]);
	}
}

  А вот подшаблон

  @extends(request()->route()->getController()->parentView)

@section('departments')

<div class="container-fluid forms_container">
	<ul>
		@foreach ($department as $dep)
		<li>
			{{$dep->name}}
			<ul>
				@foreach ($category as $cat)

				@if($dep->department_id===$cat->department_id)
				<li>
					{{$cat->name}}
				</li>
				@endif

				@endforeach
			</ul>
		</li>
		@endforeach
	</ul>
</div>
@endsection

Не в сети

#3 13.09.2018 19:07:30

Re: Как привязать контроллер к шаблону

Братья славяне , я так и не понял , или вопрос слишком сложный , или слишком тупой. smile))
   Или я не правильно осветил ситуацию????
Тогда я поставлю вопрос по-другому , мне нужно из таблиц в базе данных сделать выборку категорий , и соответствующих им подкатегорий , и передать в шаблон страницы. Все это я сделал при помощи Route и Controller , но меню появляется на странице естесственно , когда я выбираю в меню например каталог товаров, но если я перехожу на другую вкладку , оно естесственно пропадает. А мне нужно чтобы оно постоянно находилось на странице независимо от выбранного маршрута. Спасибо.
P.S В Smarty этот скрипт PHP привязывается примерно так.

{* admin_menu.tpl *}
{load_presentation_object filename="admin_menu" assign="obj"}

<h1 class="admin_menu_title"> Administratoriaus meniu </h1>
<p class="admin_menu"> |
  <a href="{$obj->mLinkToStoreAdmin}">Catalog Admin</a> |
  <a href="{$obj->mLinkToCartsAdmin}">Carts Admin</a> |
  <a href="{$obj->mLinkToOrdersAdmin}">Orders Admin</a> |
  <a href="{$obj->mLinkToStoreFront}">Pagrindinis</a> |
  <a href="{$obj->mLinkToLogout}">Logout</a> |
</p>

Изменено DzonyBB (13.09.2018 19:10:17)

Не в сети

#4 14.09.2018 06:18:57

Re: Как привязать контроллер к шаблону

Я включаю в шаблон подшаблон при помощи @include . Как мне к этому подшаблону прописать маршрут к контроллеру ???

Никак. Это бессмыслица: иметь маршрут к тому, что не вызывается самостоятельным запросом. Мне кажется на самом деле ты хочешь неявно передавать данные в некий шаблон. Для этого в Blade есть механизм View Composer.

https://laravel.com/docs/5.6/views#view-composers
https://vegibit.com/what-is-a-view-composer-in-laravel/


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 14.09.2018 07:14:12

Re: Как привязать контроллер к шаблону

Спасибо за ответ . Я обязательно пройдусь по ссылкам . В кратце я уже описал что я хочу . На странице имеется подшаблон Категория товаров например . Мне нужно из таблицы Category например выбрать категории и передать массив в этот подшаблон. Как это лучше реализовать? Может есть ссылка на пример , где эта тема обсуждалась? Спасибо.

Не в сети

#6 14.09.2018 14:25:43

Re: Как привязать контроллер к шаблону

Я бы через виджеты сделал
https://github.com/arrilot/laravel-widgets

Не в сети

#7 14.09.2018 17:40:55

Re: Как привязать контроллер к шаблону

Я бы через виджеты сделал

   Сорри , вся проблема в том , что я Laravel только осваиваю , до этого работал со Smarty , но Laravel мне пока нравится больше, просто нужно вникнуть . Поэтому с удовольствием рассмотрю все полезные советы. Извиняюсь за тупость , про виджеты нельзя ли немного поподробнее ??? Про composer вроде как нашел информацию. Спасибо.
P.S Прошелся по ссылке , надеюсь разберусь . Но хотелось бы если можно достоинства и недостатки обоих из методов.
    Так как в этой книШке LARAVEL тоже описывается view composer .
Спасибо .

Изменено DzonyBB (14.09.2018 17:52:29)

Не в сети

#8 15.09.2018 15:40:48

Re: Как привязать контроллер к шаблону

Но хотелось бы если можно достоинства и недостатки обоих из методов.

Честно скажу что View Composer еще несмотрел. Начинал с 5.4 версии Laravel, там еще не было View Composer. Поэтому работал с виджетами для отображения меню и прочих элементов страницы которые загружаются отдельно.
Если с точки зрения обучения - то попробуйте оба варианта. Потом тут отпишитесь какой вам показался удобнее и правильнее для вас (с точки зрнения вашей логики построения страницы) smile

Изменено SemasPing (15.09.2018 15:41:27)

Не в сети

#9 15.09.2018 16:59:28

Re: Как привязать контроллер к шаблону

Начинал с 5.4 версии Laravel, там еще не было View Composer.

я установил 5.6. ОК! Если получится. отпишусь. wink

Не в сети

#10 16.09.2018 21:06:23

Re: Как привязать контроллер к шаблону

Че то я туплю совсем . а как передать в composer не одну , а две переменные .Пробую таким методом , выбивает ошибку в месте обьявления массива. Опять же в описании не нашел ответа. Прошу тыкнуть носом.

    public $data=array($departments,$categories);
	
	public function compose(View $data)
	{
         $departments->with('department', Department::where('stat',0 )
			->orderBy('department_id')->get());
			
	  $categories->with('category', Category::orderBy('name')->get());
	}

Не в сети

#11 16.09.2018 21:53:06

Re: Как привязать контроллер к шаблону

В принципе вторая переменная и не нужна , обошелся одной не знаю насколько криво. smile

	public function compose(View $view)
	{
		$view->with('department', Department::where('stat',0 )
			->orderBy('department_id')->get());

		$view->with('category', Category::orderBy('name')->get());
	}

Не в сети

#12 17.09.2018 07:01:26

Re: Как привязать контроллер к шаблону

Спасибо всем откликнувшемся.

Не в сети

Подвал раздела