Laravel по-русски
Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Для breadcrumbs мне надо получать переменную $request->path() и извлекать из неё часть после последнего / при помощи explode.
Вопрос в том где получать $request, обрабатывать его и выводить переменную $bread таким образом, чтобы потом $bread был доступен при любом роуте.
Никак не могу понять как пользоваться скриптом gulp-image-resize.
Описание скудное. В ветке проекта на гитхабе вопрос задать нельзя - сразу перекидывает на grunt-image-resize.
Сначала получал ошибку из-за того, что не поставил слеш в начале пути src.
То есть вот это gulp.src('resources/img/*') приводит к ошибке Error: write EPIPE
А вот это нет .pipe(gulp.dest('public/img/resize-640'));
events.js:85
throw er; // Unhandled 'error' event
^
Error: Error: write EPIPE
at finish (d:\OpenServer\domains\steklo.dev\node_modules\gulp-image-resize\node_modules\gulp-gm\index.js:40:21)
at gm.<anonymous> (d:\OpenServer\domains\steklo.dev\node_modules\gulp-image-resize\node_modules\async\lib\async.js:485:30)
at gm.emit (events.js:118:17)
at gm.<anonymous> (d:\OpenServer\domains\steklo.dev\node_modules\gulp-image-resize\node_modules\gulp-gm\node_modules\gm\lib\getters.js:70:16)
at Socket.cb (d:\OpenServer\domains\steklo.dev\node_modules\gulp-image-resize\node_modules\gulp-gm\node_modules\gm\lib\command.js:314:16)
at Socket.g (events.js:199:16)
at Socket.emit (events.js:107:17)
at onwriteError (_stream_writable.js:317:10)
at onwrite (_stream_writable.js:335:5)
at WritableState.onwrite (_stream_writable.js:105:5)Потом исправил код вот так и ошибки больше нет.
gulp.task('img-resize-640', function () {
gulp.src('/resources/img/*')
.pipe(imageResize({ width : 640 }))
.pipe(gulp.dest('/public/img/resize-640'));
});Но и результата тоже не появляется - папка resize-640 с маленькими картинками не создается
$ gulp img-resize-640
[18:56:36] Using gulpfile d:\OpenServer\domains\steklo.dev\gulpfile.js
[18:56:36] Starting 'img-resize-640'...
[18:56:36] Finished 'img-resize-640' after 11 msВ смысле на папки var и www надо права х?
у меня в public вообще только файлы
root@server:/var/www/mysite.ru# ls -l
total 172
drwxr-xr-x 9 www-data www-data 4096 Aug 3 14:20 app
-rwxr-xr-x 1 www-data www-data 1646 Aug 3 14:20 artisan
drwxr-xr-x 3 www-data www-data 4096 Aug 3 14:20 bootstrap
-rwxr-xr-x 1 www-data www-data 1201 Aug 3 14:20 composer.json
-rwxr-xr-x 1 www-data www-data 105057 Aug 3 14:20 composer.lock
drwxr-xr-x 2 www-data www-data 4096 Aug 3 14:20 config
drwxr-xr-x 5 www-data www-data 4096 Aug 3 14:20 database
-rwxr-xr-x 1 www-data www-data 503 Aug 3 14:20 gulpfile.js
-rwxr-xr-x 1 www-data www-data 159 Aug 3 14:20 package.json
-rwxr-xr-x 1 www-data www-data 87 Aug 3 14:20 phpspec.yml
-rwxr-xr-x 1 www-data www-data 899 Aug 3 14:20 phpunit.xml
drwxr-xr-x 2 www-data www-data 4096 Aug 3 16:47 public
-rwxr-xr-x 1 www-data www-data 1928 Aug 3 14:20 readme.md
drwxr-xr-x 5 www-data www-data 4096 Aug 3 14:20 resources
-rwxr-xr-x 1 www-data www-data 567 Aug 3 14:20 server.php
drwxrwxrwx 5 www-data www-data 4096 Aug 3 14:20 storage
drwxr-xr-x 2 www-data www-data 4096 Aug 3 14:20 tests
drwxr-xr-x 28 www-data www-data 4096 Aug 3 14:20 vendorroot@schel4ok:/var/www/mysite.ru/public# ls -l
total 8
-rwxr-xr-x 1 www-data www-data 0 Aug 3 14:20 favicon.ico
-rwxr-xr-x 1 www-data www-data 1786 Aug 3 14:20 index.php
-rwxr-xr-x 1 www-data www-data 24 Aug 3 14:20 robots.txtвсем привет
Я начал тренироваться с установкой на выделенном сервере ОС Debian 7 x32.
Установил Apache 2.2.22 и php 5.5.27 и доп модули
apt-get install apache2 php5 libapache2-mod-php5 php5-fpm mysql-server mysql-client php5-mysql php5-curl curl phpmyadmin
потом поставил composer, nodejs
установил laravel командой
laravel new /var/www/mysite.ru
поменял пользователя и права доступа
cd /var/www/mysite.ru
chown -R www-data:www-data .
chmod -R 755 .
chmod -R 777 storage
в файле /etc/apache2/sites-available/mysite.ru
<VirtualHost *:80>
ServerAdmin webmaster@mysite.ru
ServerName mysite.ru
ServerAlias www.mysite.ru
DocumentRoot /var/www/mysite.ru/public
DirectoryIndex index.html index.htm index.php
</VirtualHost>потом делаю символьную ссылку /etc/apache2/sites-enabled/mysite.ru
и получаю 403 Forbidden
You don't have permission to access / on this server.
может что-то с правами не так?
опять проблема с gulp
поставил себе lightbox в vendor/bower_components/lightbox
далее хочу скопировать стили в папку resources/assets/css
.copy('vendor/bower_components/lightbox/сss', 'resources/assets/css/lightbox')
но не получается
все остальные команды копирования срабатывают, но только эта не копирует файлы
и ошибки никакой не возникает в процессе выполнения команды gulp
просто в папке resources/assets/css не появляется новых файлов и всё
я уже даже пробовал копировать не в css, а в less
еще пробовал копировать не папку целиком, а файлы по-отдельности
но ничего не работает
вообще не понимаю в чем дело
как это можно продиагностировать?
хочу сделать ссылки для следующего и предыдущего материала в блоге и почему-то получаю ошибку.
выдает ошибку Trying to get property of non-object (View: D:\OpenServer\domains\...\resources\views\news\item.blade.php)
ошибка пропадает если убрать код с переменными $previous и $next
Похожий код нормально работал на ларавел 4
routes.php
Route::get('news/{title}', 'NewsController@showItem');NewsController.php
<?php namespace App\Http\Controllers;
use App\News;
class NewsController extends Controller {
public function showItem($title)
{
$news = News::where('sef', '=', $title)->get();
foreach ($news as $news) // access user properties here
{
$previous = News::where('id', '<', $news->id)->orderBy('id', 'desc')->firstOrFail();
$next = News::where('id', '>', $news->id)->orderBy('id', 'asc')->firstOrFail();
}
return view('news.item')
->withNews($news)
->withPrevious($previous)
->withNext($next);
}
}\resources\views\news\item.blade.php
@extends('layout.main')
@foreach ($news as $news)
@section('title')
{{ $news->metatitle }}
@stop
@section('keywords')
{{ $news->metakey }}
@stop
@section('description')
{{ $news->metadesc }}
@stop
@section('content')
<article>
<i class="fa fa-calendar text-primary"> {{ date('d M Y', strtotime($news->created_at)) }} </i>
<h1 class="page-header margin-0">{{ $news->title }}</h1>
<div class="page-content">
{{ HTML::image($news->image, $alt = $news->title, array('class' => 'thumbnail img-responsive pull-left')) }}
<div class="fulltext">{{ $news->fulltext }}
</div>
<div class="clearfix"></div>
</div>
</article>
@endforeach
<ul class="pager">
@if (isset($previous) and $previous->category_id === $news->category_id )
<li class="previous"><a href="{{ $previous->sef }}">← Пред новость</a></li>
@endif
<li><a href="/news">↑ Наверх</a></li>
@if (isset($next) and $next->category_id === $news->category_id )
<li class="next"><a href="{{ $next->sef }}">След новость →</a></li>
@endif
</ul>
@stopнашел обходной путь
замена значения переменных пути к файлам шрифтов до компиляции css
app.less
@import "bootstrap/bootstrap.less";
@import "fontawesome/font-awesome.less";
@import "local-variables.less";
local-variables.less
@icon-font-path: "../../fonts";
@fa-font-path: "../../fonts";
почему-то не работает команда
.copy('resources/assets/fonts', 'public/build/fonts')
соответственно приходится каждый раз вручную копировать туда папку со шрифтами, потому что команда version каждый раз опустошает папку build
.version([
'public/css/app.css',
'public/js/all.js'
])
сиди и получай удовольствие от своей важности - я и сам разберусь
ты и так ответил на другой вопрос и это такое же хамство
лучше вообще ничего не отвечать, чем писать пургу
у меня вопрос был вообще не об этом
я смог получить результат при помощи непосредственной вставки кода в AppServiceProvider
app\Providers\AppServiceProvider.php
public function boot()
{
view()->composer('modules.mainmenu', function($view)
{
$view->withTree(Category::descendantsOf(1)->toTree());
});
}но мне хочется этот код вывести в контроллер
view()->composer('modules.mainmenu', 'CategoryController@mainmenu');
а контроллер никак не хочет опознаваться Class CategoryController does not exist
то есть скорее всего AppServiceProvider не видит контроллер, хотя я добавлял вот это
use App\Http\Controllers\CategoryController;
мне надо сделать отображение меню на всех страницах
app\Providers\AppServiceProvider.php
class AppServiceProvider extends ServiceProvider {
public function boot()
{
view()->composer('modules.mainmenu', 'CategoryController@mainmenu');
}
}app\Http\Controllers\CategoryController.php
<?php namespace App\Http\Controllers;
use App\Category;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class CategoryController extends Controller {
public function mainmenu()
{
$result = Category::descendantsOf(1)->toTree();
return view('modules.mainmenu')->withTree($result);
}
}resources\views\layout\main.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<body>
@include('modules.mainmenu')
</body>
</html>resources\views\modules\mainmenu.blade.php
<ul class="nav navbar-nav">
@foreach ($tree as $node)
<li class="dropdown"><a href="{{ $node->sef }}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">{{ $node->title }} <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
@foreach ($node->children as $child)
<li><a href="{{ $child->sef }}">{{ $child->title }}</a></li>
@endforeach
</ul>
</li>
@endforeach
</ul>получаю ошибку
3/3
ErrorException in Container.php line 776:
Class CategoryController does not exist (View: D:\OpenServer\domains\steklo.dev\resources\views\layout\main.blade.php) (View: D:\OpenServer\domains\steklo.dev\resources\views\layout\main.blade.php)
вывод списка меню на отдельной странице при помощи Route::get('categories', 'CategoryController@mainmenu'); нормально работает, но через view()->composer что-то не так
Мне надо заменить файл variables.less в bootstrap
А команда copy не заменяет файл, если он существует
elixir(function(mix) {
mix
.copy('vendor/bower_components/bootstrap/less', 'resources/assets/less/bootstrap')
.delete('variables.less')
.copy('new-variables.less', 'resources/assets/less/bootstrap/variables.less')
});
Как это можно обойти?
спасибо
теперь не работает Storage::name($file)
вот тут написано http://laravel.com/api/5.0/Illuminate/F … ystem.html
что есть метод name
а у меня он вызывает ошибку
ErrorException in FilesystemManager.php line 232:
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Filesystem\FilesystemAdapter' does not have a method 'name'
посмотрев сам файл FilesystemAdapter.php метод name я там действительно не нашел.
как они интересно документацию пишут?
сверху в контроллере подключил
namespace App\Http\Controllers;
use Storage;
далее пробую вывести список файлов в папке
$path = base_path().'/resources/assets/img/';
$files = Storage::files($path);
dd($files); выводит пустой массив
dd($path); выводит "D:\OpenServer\domains\steklo.dev/resources/assets/img/"
и в этой папке есть 2 файла
также пробовал $files = Storage::allFiles($path);
На сайте есть кнопка "обратный звонок", которая вызывает форму в модальном окне
Соответственно с любой страницы сайта посетитель должен иметь возможность отправить сообщение без перезагрузки страницы.
Функция получения данных $_POST и $_FILES и отправка сообщения указаны в HomeController@post.
как это оформить в routes.php?
Route::post('что должно быть тут', 'HomeController@post');
всё!!! разобрался
@if (isset($previous) and $previous->category_id === $page->category_id )
<a href="{{ URL::to( 'news/' . $previous->sef ) }}">Previous</a>
@endif
@if (isset($next) and $next->category_id === $page->category_id )
<a href="{{ URL::to( 'news/' . $next->sef ) }}">Next</a>
@endif
немного доработал
class NewsController extends BaseController {
public function getIndex()
{
$pages = Page::where('category_id', '=', 85)
->orderBy('created_at', 'desc')
->paginate(10); // все новости по 10 штук на страницу
return View::make('news.index')->withPages($pages);
}
public function showpage($title)
{
$pages = Page::where('category_id', '=', 85)->where('sef', '=', $title)->get();
foreach ($pages as $page) // access user properties here
{
$previous = Page::where('id', '=', $page->id - 1)->get()->first();
$next = Page::where('id', '=', $page->id + 1)->get()->first();
}
return View::make('news.item')
->withPages($pages)
->withPrevious($previous)
->withNext($next);
}
}<a href="{{ URL::to( 'news/' . $previous->sef ) }}">Previous</a>
@if (isset ($next))
<a href="{{ URL::to( 'news/' . $next->sef ) }}">Next</a>
@endifНовостей на сайте немного, поэтому они хранятся в одной таблице с остальными страницами в отдельной категории id=85
При этом новости расположены в конце БД, поэтому последняя страница рушилась с ошибкой, которую я вылечил при помощи @if (isset ($next)).
Но вот проблему с $previous я пока решить не могу.
При нажатии на ссылку previous на странице с первой новостью я попадаю на страницу из другой категории, которая выдает ошибку Undefined variable: previous
И вот как убрать ссылку previous со страницы с первой новостью мне пока непонятно.
вот так получилось немного лучше
$previous = Page::where('id', '=', $page->id-1)->get()->first();
$next = Page::where('id', '>', $page->id+1)->get()->first();
при этом обе ссылки работают как надо, только не отображается страница с максимальным id в БД. Видимо потому, что для неё не существует $next.
Надо как-то сделать обработку этого события
я делаю вывод страниц по полю sef из БД, чтобы сразу были красивые урлы
но не получается нормально сделать на странице с одной новостью ссылки previous и next
в файле routes.php
Route::get('news', 'NewsController@getIndex'); / все новости
Route::get('news/{title}', 'NewsController@showpage'); / одна новостьпопытался сделать так в контроллере NewsController
public function showpage($title)
{
$pages = Page::where('sef', '=', $title)->get();
foreach ($pages as $page) // access user properties here
{
$previous = Page::where('id', '<', $page->id)->get()->first();
$next = Page::where('id', '>', $page->id)->get()->first();
}
return View::make('news.item')->withPages($pages)->with('previous', $previous)->with('next', $next);
}в шаблоне вывожу
<a href="{{ URL::to( 'news/' . $previous->sef ) }}">Previous</a>
<a href="{{ URL::to( 'news/' . $next->sef ) }}">Next</a>
почти работает, но есть 2 проблемы:
1) ссылка previous всегда ссылается на одну и ту же статью, у которой id = 1
2) на предпоследней странице ссылка next уже вызывает ошибку
Trying to get property of non-object (View: D:\OpenServer\domains\schel4ok.dev\app\views\news\item.blade.php)
как-то раз я пытался установить настройки отображения даты и прочего при помощи функции setlocale и других способов прямо в файлах blade.php
у меня ничего не вышло - и я все эти функции удалил
но теперь у меня в коде сайта появилась какая-то цифра 3.3
появляется она до первого тега
3.3<!doctype html>
<head> нигде ничего такого я найти не смог
странно, что эта цифра 3.3 появляется еще и в консоли
например после выполнения команды
>php artisan db:seed
3.3Seeded: XLSSeeder
а должно быть
>php artisan db:seed
Seeded: XLSSeeder
что это такое?
пардон. я подумал, что ты имеешь в виду таймстампы внутри файла, а не в названии.
дело и правда было в них.
сейчас проверил
сделал новый файл миграции в артизане - работает
удалил таймстамп из названия и в autoload_classmap.php - не работает
всё дело в этой функции resolve($file), которая убирает первые 4 части массива после разбора
только непонятно зачем сначала разбирать название из строки в массив, а потом собирать его обратно
Сам придумал? Таймстампы вообще не обязательны
не может быть
вот выложил файлы на гитхаб https://github.com/schel4ok/mylaravel
по-моему вы занимаетесь какой-то фигней
всё вообще не так делается
<?php
class XLSSeeder extends Seeder {
public function run()
{
$xls = 'app/database/seeds/seeder.xlsx';
$book = Excel::load($xls, 'UTF-8')->all();
foreach($book as $sheet)
{
if ($sheet->getTitle() === 'categories')
{ Category::truncate();
foreach($sheet as $row)
{
$category = Category::create([
'id' => $row->id,
'parent_id' => $row->parent_id,
'level' => $row->level,
'title' => $row->title,
'sef' => $row->sef,
'body' => $row->body,
'image' => $row->image,
'metatitle' => $row->metatitle,
'metakey' => $row->metakey,
'metadesc' => $row->metadesc,
]);
}
}
if ($sheet->getTitle() === 'menu')
{ Menu::truncate();
foreach($sheet as $row)
{
$menu = Menu::create([
'id' => $row->id,
'parent_id' => $row->parent_id,
'level' => $row->level,
'title' => $row->title,
'route' => $row->route,
'class' => $row->class,
'metatitle' => $row->metatitle,
'metakey' => $row->metakey,
'metadesc' => $row->metadesc,
]);
}
}
}
}
}