Laravel по-русски

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

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

#1 22.11.2014 14:28:34

Где хранить собственные классы и функции?

Объясните, пожалуйста, как и где в ларавел 4 правильно хранить свои собственные классы и функции, чтобы удобно было к ним обращаться?

Изменено Кирилл (22.11.2014 14:29:11)

Не в сети

#2 22.11.2014 20:58:20

Re: Где хранить собственные классы и функции?

Вкратце - хранить в своей неймспейс-папке, обращаться через внедрение при помощи Dependency Injection или через фасады.

Поподробнее.

Создаете папку app/Acme (Acme обозначает "произвольное имя") и говорите фреймворку, что в ней будете держать классы согласно стандарта, например, psr-0, добавляя в composer.json следующее:

"autoload": {
		"classmap": [
			...
		],
		"psr-0": {
			"Acme": "app/"
		}
	},

Пишете свои классы в этой папке, прописывая всем им неймспейсы, совпадающие, в данном случае, с файловым путём. Рекомендуется прочитать про паттерны программирования (или хотя бы погуглить что такое репозитории), хорошим стартом будет купить месячную подписку на http://laracasts.com

Используете их в других классах, указывая их в качестве аргументов к конструктору:

<?php

use Acme\Post\PostRepository;

class PostController extends BaseController {

	private $postRepository;

	public function __construct(PostRepository $postRepository)
	{
		$this->postRepository = $postRepo;
	}

	public function show($slug)
	{
		$post = $this->postRepository->getBySlug($slug);
		return View::make("post/view_post", compact("post"));
	}

}

Так как почти все свои классы Laravel достает из IoC-контейнера, на вход конструктора контроллера он все подаст что надо.

Можно вместо DI юзать фасады, и в примере выше в show() писать $post = PostRepository::getBySlug($slug); , но фасады в частности плохи тем, что у вас не будет работать автодополнение в IDE. Как делать фасады, исчерпывающе написано в документации - http://laravel.com/docs/4.2/facades .

Если функции и классы используются во многих ваших проектах, то можно выделить их в пакет и подтягивать их композером с гитхаба как и все остальные пакеты - http://laravel.com/docs/4.2/packages .

Не в сети

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