Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Объясните, пожалуйста, как и где в ларавел 4 правильно хранить свои собственные классы и функции, чтобы удобно было к ним обращаться?
Изменено Кирилл (22.11.2014 14:29:11)
Не в сети
Вкратце - хранить в своей неймспейс-папке, обращаться через внедрение при помощи 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 .
Не в сети
Страницы 1