Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Странно что никто не написал что app.js приводится в сжатое состояние командой для гульпа, или чаще всего
npm run production
После чего он раз в 5 сжимается. У меня около 300 кб что тоже многовато, конечно. Мне нужен vue для админки, думаю подключить его отдельно для определенных адресов.
Я бы, по возможности, не использовал hasManyThrough потому что она не до конца реализована в laravel - с неё нельзя давать ссылки на другие таблицы, кроме тех что изначально были связаны. Через "один ко многим" и "многие ко многим" все неплохо работает.
Вариантов с ssi не нашел, можно только отключить кэширование для залогиненных через
if ($http_cookie ~ "remember_web.+") { set $no_cache 1; }
Для гостей будет все кэшироваться, причем в кэше остаются куки laravel_session и всё что есть у незалогиненных в ларавел.
Кто-то может сказать, насколько это опасно?
Поменял в настройках laravel SESSION_DRIVER=cookie - не особо помогло. Основная проблема - в кэше сохраняются куки а их не отключить.
Кто-нибудь занимался кэшированием через nginx на laravel - как, например, реализовывали блок авторизации через ssi? У меня упорно кэшируется данный блок, несмотря на различные варианты настроек. Например:
server.ru.nginx.ssl.conf
server {
listen 185.188.1.1:443;
server_name server.ru www.server. ru;
...
ssi on;
#для отмены кэширования всей страницы входа на сайт
if ($request_uri ~* "/(login)")
{ set $no_cache 1; }
location / {
...
#для блока со скриптом отображения авторизационной информации
location ~ ^/ssi/ {
fastcgi_pass 127.0.0.1:9002;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
set $no_cache 1;
fastcgi_no_cache 1;
}
В app.blade.php:
...
<!-- Authentication Links -->
<!--#include virtual="/ssi/get_user_info.blade.php" wait="no" -->
Причем кэш в процессе обновления страницы не видно, данный блок постоянно обновляет инфу если вставить php echo time(), но информация о пользователе вытаскивается откуда-то.
Сами настройки кэширования в server.ru.nginx.ssl.conf
location ~ \.php$ {
fastcgi_ignore_headers Cache-Control Set-Cookie;
fastcgi_cache fcgi;
fastcgi_cache_valid 200 60m;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
try_files $uri /index.php =404;
fastcgi_pass 127.0.0.1:9002;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
(удалите пожалуйста - создал новую тему по кэшированию)
Пока нашел такое решение - вставить в нужный публичный файл:
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$request = Illuminate\Http\Request::capture();
// trigger all the middlewares (including SessionStart)
$response = $kernel->handle($request);
И кажется можно использовать Auth:: и т.п. Не совсем понимаю как это работает, если кто-то объяснит - буду признателен.
Есть файл который отдельно обрабатывается (через php-fpm). В общем, я его хочу разместить в public папке. Что можно сделать, чтобы в нем использовать классы из laravel? Так, чтобы можно было добавить use Illuminate\Foundation\... и в коде вызывать методы.
Laravel Framework 5.4.36
PHP 5.6.38
Это в моделях которые связываются с пивотной? Попробовал разные варианты - не работает. Без
->using('App\CardUser') вообще ничего не показывает а с ней пустые массивы. (пока делаю в виде json для связи пивотной таблицы с дополнительной структурой, прямо в поле таблицы через withPivot).
Есть связь многие ко многим (Card и User) и промежуточная pivot таблица CardUser (class CardUser extends Pivot {//}).
Теперь, можно вызвать из промежуточной модели определенные данные с внешним ключом, например модель ссылки.
class CardUser extends Pivot
{
//дополнительная связь промежуточной таблицы
public function links()
{
return $this->hasMany('App\Link', 'card_user_id');
}
}
class Card extends Model
{
public function users() {
return $this->belongsToMany('App\User', 'card_user')->using('App\CardUser');
}
}
class User extends Authenticatable
{
public function cards() {
return $this->belongsToMany('App\Card', 'card_user')->using('App\CardUser');
}
}
Но при использовании возникают проблемы, так как не указаны поля в withPivot, которых собственно и нет, а есть только внешний ключ из другой модели/таблицы. Соответственно pivot не связывается с link и не работает как надо, а только через first() Controller:
$links = CardUser::find(1)->links;
dump($links);
$user = User::find(1);
foreach ($user->cards as $card) {
$links = $card->pivot->first()->links;
dump($links);
}
В общем, в новых версиях laravel можно для промежуточной таблицы pivot создать модель и потом прописать в зависимостях приставку using:
public function users() {
return $this->belongsToMany('App\User')->using('App\Membership');
}
А сама модель создается так
class Membership extends Pivot
Миграции для промежуточной так же составляются? Очень мало инфы по этой теме.
Schema::create('membership', function (Blueprint $table) {
$table->integer('role_id')->unsigned()->index();
$table->foreign('role_id')->references('id')->on('roles');$table->integer('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users');$table->string('navik', 255);
}
У меня есть пользователи и роли (многие ко многим), я хочу чтобы для каждой конкретной роли у пользователя был опыт и список навыков. Как это лучше реализовать, hasManyThrough подойдет?
Ещё вариант сделать через таблицу pivot, но как её связать с моделью навыков, например?